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

vs2*_*010 3 c# wpf xaml

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

    <StackPanel>
        <StackPanel.Resources>
            <Style TargetType="{x:Type Button}">
                <Setter Property="Margin" Value="0,10,0,0"/>
            </Style>
        </StackPanel.Resources>
        ...
Run Code Online (Sandbox Code Playgroud)

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

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

Bri*_*ndy 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>
Run Code Online (Sandbox Code Playgroud)