代码之家  ›  专栏  ›  技术社区  ›  Tigraine

将Style的TargetType属性设置为基类

  •  42
  • Tigraine  · 技术社区  · 15 年前

    我只是在WPF中摸索了一下,希望窗口中的所有元素共享相同的空白。 我发现所有能够具有边距的控件都源自frameworkelement,因此我尝试了以下方法:

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

    而且,这不起作用。 我可以将此应用于所有按钮,但不能应用于从按钮派生的所有元素。 我是错过了什么,还是根本不可能?

    我是唯一一个想在WPF中使用CSS的人吗?

    2 回复  |  直到 12 年前
        1
  •  55
  •   Rachel    12 年前

    不幸的是,您不能将样式应用于基FrameworkElement类型;虽然WPF允许您编写样式,但它不会将其应用于派生自该样式的控件。这似乎也适用于frameworkelement的子类型,例如buttonbase、button/togglebutton/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>
    

        2
  •  7
  •   Aran Mulholland JohnnyAce    15 年前

    问题是,在搜索样式时,WPF不会搜索当前样式派生自的所有类。但是,您可以给样式一个键,并将其应用于希望具有公共属性的所有元素。如果在样式中指定的属性不能应用于要设置样式的元素,则忽略该属性。

    推荐文章