将WPF样式应用于多个控件

时间:2011-01-12 23:32:31

标签: .net xaml wpf-controls styles

这个问题可能是重复的,但我在SO上找不到它。

如果我有一个容器WindowStackPanelGrid等,我有什么方法可以将Style应用于某种类型的所有控件,包含在其中?

我可以使用Container.Resources并将个别更改设置为TargetType来应用属性更改,但是当我尝试设置目标的Style时,我收到错误,告诉我我无法设置Style

有没有办法在XAML中执行此操作?

1 个答案:

答案 0 :(得分:36)

排序,取决于您要设置的内容。如果属性是公共基类的属性,则可以。您还可以在WPF中拥有比Silverlight更多的选项,因为您可以继承样式。例如......

<Window.Resources>
    <Style x:Key="CommonStyle" TargetType="FrameworkElement">
        <Setter Property="Margin" Value="2" />
    </Style>
    <Style TargetType="StackPanel" BasedOn="{StaticResource CommonStyle}">
    </Style>
    <Style TargetType="Grid" BasedOn="{StaticResource CommonStyle}">
    </Style>
    <Style TargetType="Button" BasedOn="{StaticResource CommonStyle}">
        <Setter Property="Background" Value="LimeGreen" />
    </Style>
</Window.Resources>

共同样式CommonStyle将由3个隐式样式继承。但是,您只能指定所有FrameworkElement类通用的属性。您无法在CommonStyle中设置Background,因为FrameworkElement不提供Background属性。因此,即使Grid和StackPanel具有Background(继承自Panel),它与Button具有的Back属性不同(从Control继承。)

希望这有助于您前进。