Suche…


Bemerkungen

Einleitende Bemerkungen

In WPF definiert ein Stil die Werte einer oder mehrerer Abhängigkeitseigenschaften für ein bestimmtes visuelles Element. In der gesamten Anwendung werden Stile verwendet, um die Benutzeroberfläche konsistenter zu gestalten (z. B. für alle Dialogschaltflächen eine einheitliche Größe zu erhalten), und um Massenänderungen zu erleichtern (z. B. das Ändern der Breite aller Schaltflächen).

Stile werden in der Regel in einem ResourceDictionary auf hoher Ebene in der Anwendung definiert (z. B. in App.xaml oder in einem Design ), sodass sie app-weit verfügbar sind. Sie können jedoch auch für ein einzelnes Element und dessen untergeordnete Elemente definiert werden, z Stil für alle TextBlock Elemente in einem StackPanel .

<StackPanel>
    <StackPanel.Resources>
        <Style TargetType="TextBlock">
            <Setter Property="Margin" Value="5,5,5,0"/>
            <Setter Property="Background" Value="#FFF0F0F0"/>
            <Setter Property="Padding" Value="5"/>
        </Style>
    </StackPanel.Resources>
        
    <TextBlock Text="First Child"/>
    <TextBlock Text="Second Child"/>
    <TextBlock Text="Third Child"/>      
</StackPanel>

Wichtige Notizen

  • Der Ort, an dem der Stil definiert ist, beeinflusst, wo er verfügbar ist.
  • Weiterleitungsreferenzen können nicht von StaticResource aufgelöst werden. Wenn Sie also einen Stil definieren, der von einem anderen Stil oder einer anderen Ressource in einem Ressourcenwörterbuch abhängt, muss er hinter / unter der Ressource definiert werden, von der er abhängt.
  • StaticResource ist die empfohlene Methode zum Referenzieren von Stilen und anderen Ressourcen (aus Leistungs- und Verhaltensgründen), sofern Sie nicht ausdrücklich die Verwendung von DynamicResource erfordern, z. B. für Designs, die zur Laufzeit geändert werden können.

Ressourcen

MSDN enthält ausführliche Artikel zu Stilen und Ressourcen, die mehr Tiefe bieten, als hier angegeben werden kann.

Definieren eines benannten Stils

Für einen benannten Stil muss die x:Key Eigenschaft festgelegt werden und gilt nur für Elemente, die explizit mit ihrem Namen darauf verweisen:

<StackPanel>
    <StackPanel.Resources>
        <Style x:Key="MyTextBlockStyle" TargetType="TextBlock">
            <Setter Property="Background" Value="Yellow"/>
            <Setter Property="FontWeight" Value="Bold"/>
        </Style>
    </StackPanel.Resources>
        
    <TextBlock Text="Yellow and bold!" Style="{StaticResource MyTextBlockStyle}" />
    <TextBlock Text="Also yellow and bold!" Style="{DynamicResource MyTextBlockStyle}" />
    <TextBlock Text="Plain text." />      
</StackPanel>

Definieren eines impliziten Stils

Ein impliziter Stil gilt für alle Elemente eines bestimmten Typs innerhalb des Bereichs. Bei einem impliziten Stil kann x:Key da er implizit der TargetType Eigenschaft des Stils TargetType .

<StackPanel>
    <StackPanel.Resources>
        <Style TargetType="TextBlock">
            <Setter Property="Background" Value="Yellow"/>
            <Setter Property="FontWeight" Value="Bold"/>
        </Style>
    </StackPanel.Resources>

    <TextBlock Text="Yellow and bold!"  />
    <TextBlock Text="Also yellow and bold!" />
    <TextBlock Style="{x:Null}" Text="I'm not yellow or bold; I'm the control's default style!" />
</StackPanel>

Vererbung von einem Stil

Es ist üblich, einen TextBlock zu benötigen, der Eigenschaften / Werte definiert, die von mehreren Stilen gemeinsam sind, die zu demselben Steuerelement gehören, insbesondere für TextBlock . Dies wird mithilfe der BasedOn Eigenschaft erreicht. Werte werden vererbt und können dann überschrieben werden.

<Style x:Key="BaseTextBlockStyle" TargetType="TextBlock">
    <Setter Property="FontSize" Value="12"/>
    <Setter Property="Foreground" Value="#FFBBBBBB" />
    <Setter Property="FontFamily" Value="Arial" />
</Style>

<Style x:Key="WarningTextBlockStyle"
       TargetType="TextBlock"
       BasedOn="{StaticResource BaseTextBlockStyle">
    <Setter Property="Foreground" Value="Red"/>
    <Setter Property="FontWeight" Value="Bold" />
</Style>

Im obigen Beispiel würde jeder TextBlock mit dem Stil WarningTextBlockStyle als 12px Arial rot und fett dargestellt.

Da implizite Stile einen impliziten x:Key , der mit ihrem TargetType , können Sie auch diese erben:

<!-- Implicit -->
<Style TargetType="TextBlock">
    <Setter Property="FontSize" Value="12"/>
    <Setter Property="Foreground" Value="#FFBBBBBB" />
    <Setter Property="FontFamily" Value="Arial" />
</Style>

<Style x:Key="WarningTextBlockStyle"
       TargetType="TextBlock"
       BasedOn="{StaticResource {x:Type TextBlock}}">
    <Setter Property="Foreground" Value="Red"/>
    <Setter Property="FontWeight" Value="Bold" />
</Style>


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow