这个问题可能是一个重复的问题,但我在SO上找不到。
如果我有一个容器Window
、StackPanel
、Grid
等,是否有任何方法可以将某种类型的所有控件应用于其中包含的所有控件上?
我可以通过使用Container.Resources
并将单个更改设置为TargetType
来应用属性更改,但当我尝试设置目标的Style
时,我会收到一个错误,告诉我无法设置Style
。
在XAML中有没有办法做到这一点?
这个问题可能是一个重复的问题,但我在SO上找不到。
如果我有一个容器Window
、StackPanel
、Grid
等,是否有任何方法可以将某种类型的所有控件应用于其中包含的所有控件上?
我可以通过使用Container.Resources
并将单个更改设置为TargetType
来应用属性更改,但当我尝试设置目标的Style
时,我会收到一个错误,告诉我无法设置Style
。
在XAML中有没有办法做到这一点?
可以,但取决于您要设置什么属性。如果这些属性是来自于共同的基类,则可以。在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继承)。
希望这可以帮助您入门。