So richten Sie alle Steuerelemente aus (WPF-Stile)


88

Kann ich einen Stil angeben, der für alle Elemente gilt? Ich habe es versucht

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

Aber es hat nichts getan

Antworten:


118

Das von StyleIhnen erstellte ControlElement ist nur ein Targeting und keine Elemente, von denen es abgeleitet ist Control. Wenn Sie das nicht einstellen, wird x:Keyes implizit auf das gesetzt TargetType, also in Ihrem Fall x:Key="{x:Type Control}".

Es gibt keine direkte Möglichkeit, a anzugeben Style, die auf alle Elemente abzielt, die TargetTypevon der abgeleitet sind Style. Sie haben einige andere Möglichkeiten.

Wenn Sie Folgendes haben Style

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

Sie können Buttonszum Beispiel alle anvisieren

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

oder verwenden Sie den Stil direkt für ein Element, z Button

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

Ich habe mich gefragt, warum mein Stil mit einem Zieltyp FrameworkElementnicht auf alle meine Steuerelemente angewendet wurde - dies beantwortete diese Frage!
QJake

4
Ist es wirklich so beschissen, dass ich den Stil für alle Arten von Steuerelementen angeben muss, die im Fenster platziert sind, nicht nur für eine Root-Sache, die allen gemeinsam ist?
Ondřej

7

Wie Fredrik Hedblad antwortete, können Sie alle Elemente beeinflussen, die von der Kontrolle geerbt wurden.

Sie können jedoch keinen Stil für Textblock und Schaltfläche mit demselben Stil anwenden.

das zu tun:

    <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}"/>
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.