我想使用setter设置stackpanel中所有元素的默认边距,而不仅仅是按钮,还包括文本框和标签。
<StackPanel>
<StackPanel.Resources>
<Style TargetType="{x:Type Button}">
<Setter Property="Margin" Value="0,10,0,0"/>
</Style>
</StackPanel.Resources>
...
当我尝试将上面的Button更改为Control
或FrameworkElement
(每个元素的派生类型)时,它不起作用。
如何解决此问题,而无需指定2个具有相同内容但不同x:TargetType上的类型的Style
个元素?
答案 0 :(得分:8)
您可以通过Style的BasedOn属性继承:
<StackPanel.Resources>
<Style x:Key="BaseStyle" TargetType="{x:Type FrameworkElement}">
<Setter Property="Margin" Value="0,10,0,0"/>
</Style>
<Style TargetType="{x:Type Label}" BasedOn="{StaticResource BaseStyle}" />
<Style TargetType="{x:Type TextBox}" BasedOn="{StaticResource BaseStyle}" />
<Style TargetType="{x:Type Button}" BasedOn="{StaticResource BaseStyle}" />
</StackPanel.Resources>