是否可以同时将WPF样式应用于不同类型?

时间:2010-11-17 00:40:52

标签: wpf xaml inheritance styles

我想创建一个可以应用于不同控件类型的样式。像这样:

<ToolBar>
    <ToolBar.Resources>
        <Style TargetType="Control">
            <Setter Property="Margin" Value="1"/>
            <Setter Property="Padding" Value="0"/>
        </Style>
    </ToolBar.Resources>

    <ComboBox .../>
    <Button .../>
</ToolBar>

它应该适用于ComboBoxButton。但它不像我在这里写的那样有用。

这有可能吗?仅定位这些类的祖先,例如Control?如果没有,那么将常用设置应用于一堆控件的最佳方法是什么?

2 个答案:

答案 0 :(得分:9)

<强>更新

请参阅this讨论了解有趣的方法

请参阅this问题

您正在创建的样式仅定位Control,而不是从Control派生的元素。如果不设置x:Key,则隐式将x:Key设置为TargetType,因此如果TargetType =“Control”,则x:Key =“Control”。我认为没有任何直接的方法来实现这一目标。

您的选择

<Style x:Key="ControlBaseStyle" TargetType="Control">  
    <Setter Property="Margin" Value="1"/>  
    <Setter Property="Padding" Value="0"/>  
</Style>  

目标所有按钮和组合框

<Style TargetType="{x:Type Button}" BasedOn="{StaticResource ControlBaseStyle}"/> 
<Style TargetType="{x:Type ComboBox}" BasedOn="{StaticResource ControlBaseStyle}"/> 

或直接在Control

上使用样式
<Button Style="{StaticResource ControlBaseStyle}" ...>
<ComboBox Style="{StaticResource ControlBaseStyle}" ...>

答案 1 :(得分:0)

我不相信样式支持传统编程形式的继承。看起来你最好的选择就是做Meleak在他的第一个例子中提出的建议。这会强制每个控件类型具有相同的基本样式,但如果需要,仍允许您选择扩展每种类型的样式。