我想创建一个可以应用于不同控件类型的样式。像这样:
<ToolBar>
<ToolBar.Resources>
<Style TargetType="Control">
<Setter Property="Margin" Value="1"/>
<Setter Property="Padding" Value="0"/>
</Style>
</ToolBar.Resources>
<ComboBox .../>
<Button .../>
</ToolBar>
它应该适用于ComboBox
和Button
。但它不像我在这里写的那样有用。
这有可能吗?仅定位这些类的祖先,例如Control
?如果没有,那么将常用设置应用于一堆控件的最佳方法是什么?
答案 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在他的第一个例子中提出的建议。这会强制每个控件类型具有相同的基本样式,但如果需要,仍允许您选择扩展每种类型的样式。