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 vonDynamicResource
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>