这个问题可能是重复的,但我在SO上找不到它。
如果我有一个容器Window
,StackPanel
,Grid
等,我有什么方法可以将Style
应用于某种类型的所有控件,包含在其中?
我可以使用Container.Resources
并将个别更改设置为TargetType
来应用属性更改,但是当我尝试设置目标的Style
时,我收到错误,告诉我我无法设置Style
。
有没有办法在XAML中执行此操作?
答案 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继承。)
希望这有助于您前进。