将WPF样式应用于多个控件

29

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

如果我有一个容器WindowStackPanelGrid等,是否有任何方法可以将某种类型的所有控件应用于其中包含的所有控件上?

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

在XAML中有没有办法做到这一点?

1个回答

45

可以,但取决于您要设置什么属性。如果这些属性是来自于共同的基类,则可以。在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将被三个隐式样式继承。但只能指定所有FrameworkElement类共有的属性。由于FrameworkElement没有提供Background属性,因此不能在CommonStyle中设置Background。因此,即使Grid和StackPanel具有Background(从Panel继承),也不是Button具有的相同Background属性(从Control继承)。

希望这可以帮助您入门。


17
如果一个样式没有x:Key字段,它将应用于该类型的所有对象。因此,所有 StackPanel、Grid和Button都将具有该边距。 - DefenestrationDay

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接