2011-01-12 56 views
15

此问题可能是重复的,但我无法在SO上找到它。将WPF样式应用于多个控件

如果我有一个容器WindowStackPanelGrid,等有没有什么办法可以应用到Style某种类型的所有控件,其所包含的呢?

我可以申请属性更改,使用Container.Resources并设置为TargetType个人的变化,但是当我试图设定目标的Style,我得到一个错误,告诉我,我不能设置Style

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

回答

28

排序,取决于您要设置的内容。如果属性是公共基类的属性,那么可以。因为您可以继承样式,所以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所具有的Background属性(从Control继承而来)并不相同。

希望这可以帮助您顺利完成任务。

+0

太棒了,这就是我需要的,谢谢。 – ocodo 2011-01-12 23:49:38