Могу ли я добавить ресурсы или ResourceDictionary в стиль? - PullRequest
7 голосов
/ 22 ноября 2010

Можно ли определить ResourceDictionary в стиле?

Например, предположим, что я хотел бы иметь два разных стиля для StackPanels, и в одной я хочу, чтобы все кнопки были синими, а другой - чтобы они были красными. Это возможно?

Что-то вроде

<Style x:Key="RedButtonsPanel" TargetType="{x:Type StackPanel}">
    <Setter Property="Orientation" Value="Horizontal" />
    <Setter Property="StackPanel.Resources">
        <Setter.Value>
            <ResourceDictionary>
                <Style TargetType="{x:Type Button}">
                    <Setter Property="Background" Value="Red" />
                </Style>
            </ResourceDictionary>
        </Setter.Value>
    </Setter>
</Style>

Приведенный выше код завершается ошибкой с ошибкой о том, что значение свойства Setter не может быть нулевым (даже если оно явно не нулевое).

Я могу сделать что-то вроде

<ResourceDictionary x:Key="RedButtons">
    <Style TargetType="{x:Type Button}">
        <Setter Property="Width" Value="100" />
        <Setter Property="Background" Value="Red" />
    </Style>
</ResourceDictionary>

<StackPanel Resources={StaticResource RedButtons} />

Однако мне было интересно, есть ли способ объединить ResourceDictionary в стиль.

Ответы [ 2 ]

4 голосов
/ 22 ноября 2010

StackPanel.Resources не является DependencyProperty, и поэтому я не верю, что вы сможете установить это свойство в стиле.

3 голосов
/ 12 июня 2013

Попробуйте добавить Style(s) для каждого TargetType к DockPanel Style.Resources.

Я сделал нечто подобное с DockPanel Style. Требуются все кнопки или разделители, добавленные в DockPanel для согласованного оформления.

Вот пример:

<Style x:Key="DockPanelToolBarStyle" TargetType="{x:Type DockPanel}">
   <Style.Resources>
     <Style TargetType="Button" BasedOn="{StaticResource ButtonToolBarStyle}" />
     <Style TargetType="Separator" BasedOn="{StaticResource SeparatorToolBarStyle}" />
   </Style.Resources>
   <Setter Property="Height" Value="45"/>
   <Setter Property="Background" Value="{StaticResource ToolBarBrush}"/>
</Style>
...