我可以向Style添加Resources或ResourceDictionary吗?

时间:2010-11-22 20:18:00

标签: wpf xaml styles resourcedictionary

是否可以在样式中定义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的Property值的错误不能为null(即使它显然不是null)。

我可以做类似

的事情
<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 个答案:

答案 0 :(得分:4)

StackPanel.Resources不是DependencyProperty,因此我不相信您可以在该样式中设置该属性。

答案 1 :(得分:3)

尝试将每个Style(s)的{​​{1}}添加到TargetType DockPanel

我使用Style.Resources DockPanel做了类似的事情。想要将所有按钮或分隔符添加到Style以便以一致的方式进行样式设置。

以下是一个示例:

DockPanel