一个问题:如何在多个控件类型上设置WPF StackPanel.Resources?

3

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

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

当我试图将上述按钮更改为 ControlFrameworkElement(每个元素的派生类型)时,它无法正常工作。
如何在不必指定两个具有相同内容但 TargetType 上的 x:Types 不同的 Style 元素的情况下解决这个问题?
1个回答

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>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接