如何定位所有控件(WPF样式)


90

我可以指定一种适用于所有元素的样式吗?我试过了

<Style TargetType="Control">
    <Setter Property="Margin" Value="0,5" />
</Style>

但是它什么也没做

Answers:


120

Style您创建仅定位Control,而不是从派生的元素Control。如果您未设置,x:Key则将其隐式设置为TargetType,因此在您的情况下x:Key="{x:Type Control}"

没有指定任何直接的方式Style是针对从派生的所有元素TargetTypeStyle。您还有其他选择。

如果您有以下内容 Style

<Style x:Key="ControlBaseStyle" TargetType="{x:Type Control}">
    <Setter Property="Margin" Value="50" />
</Style>

您可以针对所有Buttons例如

<Style TargetType="{x:Type Button}" BasedOn="{StaticResource ControlBaseStyle}"/>

或直接在任何元素上使用样式,例如 Button

<Button Style="{StaticResource ControlBaseStyle}" ...>

我想知道为什么FrameworkElement没有将目标类型为的样式应用于我的所有控件-这回答了这个问题!
qJake

4
真的很cr脚,我必须为放置在窗口上的所有类型的控件指定样式,而不仅仅是为所有通用的根目录指定样式吗???
的Ondrej

7

正如Fredrik Hedblad回答的那样,您可以影响从控件继承的所有元素。

但是,例如,您不能将样式应用于具有相同样式的文本块和按钮。

要做到这一点:

    <Style x:Key="DefaultStyle" TargetType="{x:Type FrameworkElement}">
        <Setter Property="Control.Margin" Value="50"/>
    </Style>
    <Style TargetType="TextBlock" BasedOn="{StaticResource DefaultStyle}"/>
    <Style TargetType="Button" BasedOn="{StaticResource DefaultStyle}"/>
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.