WPF Автоматическое назначение стилей детям через родительский стиль

Я получил несколько StackPanels в моем приложении, которые хотят, чтобы их дети применяли определенные стили:

<StackPanel.Resources>
    <Style TargetType="TextBlock" BasedOn="{StaticResource SettingLabel}" />
    <Style TargetType="DockPanel" BasedOn="{StaticResource SettingRow}" />
    <Style TargetType="CheckBox" BasedOn="{StaticResource SettingCheckBox}" />
    <Style TargetType="PasswordBox" BasedOn="{StaticResource DialogPasswordBox}" />
    <Style TargetType="TextBox" BasedOn="{StaticResource DialogTextBox}" />
</StackPanel.Resources>

Вместо того, чтобы писать эти 5 строк снова и снова, я хотел дать StackPanel Сам стиль, который будет применять их и, следовательно, уменьшить избыточность.

Не возможно установить Resources в установщике стилей, потому что это не свойство зависимости:

<Style x:Key="SettingPanel" TargetType="StackPanel">
    <Setter Property="Resources">
        <Setter.Value>
            <Style TargetType="TextBlock" BasedOn="{StaticResource SettingLabel}" />
            <Style TargetType="DockPanel" BasedOn="{StaticResource SettingRow}" />
            <Style TargetType="CheckBox" BasedOn="{StaticResource SettingCheckBox}" />
            <Style TargetType="PasswordBox" BasedOn="{StaticResource DialogPasswordBox}" />
            <Style TargetType="TextBox" BasedOn="{StaticResource DialogTextBox}" />
        </Setter.Value>
    </Setter>
</Style>

Так есть ли другой способ сделать это без необходимости устанавливать стили для каждого дочернего элемента и повторять стили назначения?

1 ответ

Решение

Вы можете определить стили в Style.Resources из StackPanel, Они будут применяться ко всем детям StackPanel используя SettingPanel в качестве стиля.

<Style x:Key="SettingPanel" TargetType="StackPanel">
    <Style.Resources>
            <Style TargetType="TextBlock" BasedOn="{StaticResource SettingLabel}" />
            <Style TargetType="DockPanel" BasedOn="{StaticResource SettingRow}" />
            <Style TargetType="CheckBox" BasedOn="{StaticResource SettingCheckBox}" />
            <Style TargetType="PasswordBox" BasedOn="{StaticResource DialogPasswordBox}" />
            <Style TargetType="TextBox" BasedOn="{StaticResource DialogTextBox}" />
    </Style.Resources>
</Style>
Другие вопросы по тегам