一个样式的TargetType的属性设置为一个基类一个样式的TargetType的属性设置为一个基类

2019-05-13 14:46发布

我只是闲逛在WPF了一下,想在我的窗口中的所有元素共享相同的幅度。 我发现,能够有余量的所有控件自FrameworkElement派生,所以我尝试了以下内容:

<Window.Resources>
<Style TargetType="{x:Type FrameworkElement}">
    <Setter Property="Margin" Value="10" />
</Style>
</Window.Resources>

而且,这是行不通的。 我能将这所有的按钮,而不是从按钮获得的所有元素。 我缺少的东西,或者这是根本不可能的?

我是唯一一个感觉像使用CSS WPF将是一个好主意吗?

Answer 1:

不幸的是,你不能应用样式基本FrameworkElement的类型; 而WPF将让你写的风格,它不会将它应用于从它派生的控件。 看来,这也适用于FrameworkElement的,如ButtonBase,按钮/切换按钮/的RepeatButton的超类型的子类型。

您仍然可以使用继承,但是你必须使用显式BasedOn语法将它应用到你想让它适用于控制类型。

<Window.Resources>
    <Style TargetType="{x:Type FrameworkElement}">
        <Setter Property="Margin" Value="10" />
    </Style>

    <Style TargetType="{x:Type Label}" BasedOn="{StaticResource {x:Type FrameworkElement}}" />
    <Style TargetType="{x:Type TextBox}" BasedOn="{StaticResource {x:Type FrameworkElement}}" />
    <Style TargetType="{x:Type Button}" BasedOn="{StaticResource {x:Type FrameworkElement}}" />

</Window.Resources>



Answer 2:

问题是,对于一个风格搜索时,WPF不会通过从当前的派生的所有类搜索。 然而,你可以给风格钥匙,并将其应用至您希望有一个共同财产的所有元素。 如果不能被应用到你的造型元素的风格指定的属性,它被忽略。



文章来源: Setting a style's TargetType property to a base class