WPF StackPanel.Resources在多个控件类型上设置?

时间:2011-02-16 15:02:12

标签: c# wpf xaml

我想使用setter设置stackpanel中所有元素的默认边距,而不仅仅是按钮,还包括文本框和标签。

    <StackPanel>
        <StackPanel.Resources>
            <Style TargetType="{x:Type Button}">
                <Setter Property="Margin" Value="0,10,0,0"/>
            </Style>
        </StackPanel.Resources>
        ...

当我尝试将上面的Button更改为ControlFrameworkElement(每个元素的派生类型)时,它不起作用。

如何解决此问题,而无需指定2个具有相同内容但不同x:TargetType上的类型的Style个元素?

1 个答案:

答案 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>