Style Klasse
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Enthält Eigenschaftssetter, die zwischen Instanzen eines Typs freigegeben werden können. Ein Style
wird normalerweise in einer Ressourcensammlung deklariert, sodass es freigegeben und zum Anwenden von Steuerelementvorlagen und anderen Formatvorlagen verwendet werden kann.
public ref class Style sealed : DependencyObject
/// [Microsoft.UI.Xaml.Markup.ContentProperty(Name="Setters")]
/// [Windows.Foundation.Metadata.Activatable(65536, "Microsoft.UI.Xaml.WinUIContract")]
/// [Windows.Foundation.Metadata.Activatable(Microsoft.UI.Xaml.IStyleFactory, 65536, "Microsoft.UI.Xaml.WinUIContract")]
/// [Windows.Foundation.Metadata.ContractVersion(Microsoft.UI.Xaml.WinUIContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
class Style final : DependencyObject
[Microsoft.UI.Xaml.Markup.ContentProperty(Name="Setters")]
[Windows.Foundation.Metadata.Activatable(65536, "Microsoft.UI.Xaml.WinUIContract")]
[Windows.Foundation.Metadata.Activatable(typeof(Microsoft.UI.Xaml.IStyleFactory), 65536, "Microsoft.UI.Xaml.WinUIContract")]
[Windows.Foundation.Metadata.ContractVersion(typeof(Microsoft.UI.Xaml.WinUIContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
public sealed class Style : DependencyObject
Public NotInheritable Class Style
Inherits DependencyObject
<Style .../>
-or-
<Style ...>
oneOrMoreSetters
</Style>
- Vererbung
- Attribute
Beispiele
In diesem Beispiel werden zwei Stile erstellt: eine für einen TextBlock und eine für ein TextBox-Objekt. Jede Formatvorlage wird auf zwei Instanzen eines Steuerelements angewendet, um eine einheitliche Darstellung für jede TextBlock
und zu TextBox
erstellen. Im Beispiel wird die FrameworkElement.Style-Eigenschaft jedes Steuerelements festgelegt, indem auf als Style
{StaticResource}-Markuperweiterung verwiesen wird. Das Beispiel zeigt auch, wie Ein Stil aus einem Ressourcenwörterbuch abgerufen und auf ein Steuerelement im Code angewendet wird.
Jede Formatvorlage verfügt über mehrere Setter-Teile . In diesem XAML-Code wird kein Style.Setters
XAML-Eigenschaftselement angezeigt. Dies ist die typische Verwendung in XAML für diese Eigenschaft. Der Style.Setters
Wert ist implizit, da Setters die XAML-Inhaltseigenschaft für einen Style ist. Weitere Informationen zur XAML-Syntax und dazu, wie die XAML-Inhaltssyntax das Implizieren und Weglassen bestimmter XAML-Elemente ermöglicht, finden Sie im XAML-Syntaxleitfaden.
Beachten Sie, dass im Stil für textBox die Margin-Eigenschaft auf 4 festgelegt ist, was bedeutet, dass der TextBox
auf allen Seiten einen Rand von 4 aufweist. Um die Länge des zweiten TextBlocks zu kompensieren, der kürzer als der erste TextBlock
ist, da Nachname weniger Platz einnimmt als Der Vorname, wird der -Eigenschaft auf der Margin
zweiten TextBox
ein Wert von "6,4,4,4" zugewiesen. Dies bewirkt, dass der zweite TextBox
einen anderen Rand hat, als im Format angegeben, sodass er horizontal an der ersten TextBox
ausgerichtet wird.
<StackPanel x:Name="rootPanel">
<StackPanel.Resources>
<!--Create a Style for a TextBlock to specify that the
Foreground equals Navy, FontSize equals 14, and
VerticalAlignment equals Botton.-->
<Style TargetType="TextBlock" x:Key="TextBlockStyle">
<Setter Property="Foreground" Value="Navy"/>
<Setter Property="FontSize" Value="14"/>
<Setter Property="VerticalAlignment" Value="Bottom"/>
</Style>
<!--Create a Style for a TextBox that specifies that
the Width is 200, Height is 30, Margin is 4,
Background is LightBlue, and FontSize is 14.-->
<Style TargetType="TextBox" x:Key="TextBoxStyle">
<Setter Property="Width" Value="200"/>
<Setter Property="Height" Value="30"/>
<Setter Property="Margin" Value="4"/>
<Setter Property="FontSize" Value="14"/>
<Setter Property="Background">
<Setter.Value>
<LinearGradientBrush StartPoint="0,0.5" EndPoint="1,0.5">
<GradientStop Color="White" Offset="0.0"/>
<GradientStop Color="LightBlue" Offset="0.5"/>
<GradientStop Color="Navy" Offset="1"/>
</LinearGradientBrush>
</Setter.Value>
</Setter>
</Style>
</StackPanel.Resources>
<!--Apply the TextBlockStyle and TextBoxStyle to each
TextBlock and TextBox, respectively.-->
<StackPanel Orientation="Horizontal">
<TextBlock Text="First Name:" Style="{StaticResource TextBlockStyle}"/>
<TextBox Style="{StaticResource TextBoxStyle}"/>
</StackPanel>
<StackPanel Orientation="Horizontal">
<TextBlock Text="Last Name:" Style="{StaticResource TextBlockStyle}"/>
<TextBox Style="{StaticResource TextBoxStyle}"
Margin="6,4,4,4"/>
</StackPanel>
<StackPanel x:Name="emailAddressPanel" Orientation="Horizontal"/>
</StackPanel>
private void ShowEmailAddressBox()
{
TextBlock emailAddressLabel = new TextBlock();
emailAddressLabel.Text = "Email:";
emailAddressLabel.Style = (Style)rootPanel.Resources["TextBlockStyle"];
TextBox emailAddressBox = new TextBox();
emailAddressBox.Style = (Style)rootPanel.Resources["TextBoxStyle"];
emailAddressBox.Margin = new Thickness(38, 4, 4, 4);
emailAddressPanel.Children.Add(emailAddressLabel);
emailAddressPanel.Children.Add(emailAddressBox);
}
In diesem Beispiel werden zwei Stilelemente erstellt. Der TargetType
für das erste Stilelement ist auf TextBox
festgelegt, und der TargetType
für das zweite Stilelement ist auf Button
festgelegt. Diese werden dann als implizite Formatvorlage für ein TextBox
Steuerelement und ein Button
Steuerelement angewendet.
<StackPanel>
<StackPanel.Resources>
<Style TargetType="TextBox">
<Setter Property="Foreground" Value="Pink" />
<Setter Property="FontSize" Value="15" />
</Style>
<Style TargetType="Button">
<Setter Property="Foreground" Value="Black" />
<Setter Property="Background" Value="Yellow" />
</Style>
</StackPanel.Resources>
<TextBox Height="30" Width="120" Margin="2" Text="TextBoxStyle" />
<Button Height="30" Width="100" Margin="2" Content="ButtonStyle" />
</StackPanel>
In diesem Beispiel wird ein Style
benannter InheritedStyle erstellt, der auf einem Style
benannten BaseStyle basiert.
InheritedStyle erbt den Background
Wert von Yellow
und BaseStyle
fügt den Foreground
Wert von Red
hinzu.
<StackPanel>
<StackPanel.Resources>
<Style x:Key="BaseStyle" TargetType="Button">
<Setter Property="Background" Value="Yellow" />
</Style>
<!--Create a Style based on BaseStyle-->
<Style x:Key="InheritedStyle" TargetType="Button" BasedOn="{StaticResource BaseStyle}">
<Setter Property="Foreground" Value="Red" />
</Style>
</StackPanel.Resources>
<!--A button with default style-->
<Button Content="HelloWorld" />
<!--A button with base style-->
<Button Content="HelloWorld" Style="{StaticResource BaseStyle}" />
<!--A button with a style that is inherited from the BaseStyle-->
<Button Content="HelloWorld" Style="{StaticResource InheritedStyle}" />
</StackPanel>
Hinweise
Ein Style
ist im Grunde eine Auflistung von Eigenschafteneinstellungen, die auf eine oder mehrere Instanzen eines bestimmten Typs angewendet werden, der über solche Eigenschaften verfügt. Ein Style
enthält eine Auflistung von mindestens einem Setter-Objekt . Jede Setter
verfügt über eine Eigenschaft und einen Wert. ist Property
der Name der -Eigenschaft des Elements, auf das der Stil angewendet wird. ist Value
der Wert, der auf die -Eigenschaft angewendet wird.
Um ein Style
anzuwenden, muss das Zielobjekt ein DependencyObject sein. Die Eigenschaft, auf die jeder Setter als Property-Wert verweist, muss eine Abhängigkeitseigenschaft sein.
Sie müssen die TargetType-Eigenschaft festlegen, wenn Sie eine Style
erstellen. Andernfalls wird eine Ausnahme ausgelöst.
Wenn Sie einen Wert für dieselbe Eigenschaft in einem Style
und auch für ein Element direkt festlegen, hat der für das Element direkt festgelegte Wert Vorrang. Weitere Informationen finden Sie unter Übersicht über Abhängigkeitseigenschaften, insbesondere im Abschnitt "Rangfolge der Abhängigkeitseigenschaft".
Definieren eines Stils als XAML-Ressource
Ein Style
wird in XAML fast immer als Ressource in einem ResourceDictionary definiert.
- Für ein
Style
, das nur von anderen UI-Elementen verwendet wird, die auf derselben XAML-Seite definiert sind, definieren Sie den Style in der Regel in der FrameworkElement.Resources-Auflistung (Page.Resources
wenn ihr Stammelement ein Page ist). - Für eine
Style
, die von mehr als einer Seite in Ihrer App verwendet wird, definieren Sie in der Regel den Stil in der Application.Resources-Auflistung . Alternativ können Sie über eine separate XAML-Datei für die App verfügen, die Sie alsApplication.Resources
MergedDictionaries-Wert einschließen. - Die meisten Benutzeroberflächenelemente weisen einen Standardstil auf, der durch die Windows-Runtime definiert wird. Kopien der Standardformatvorlagen finden Sie in der XAML-Datei generic.xaml, die es sich technisch gesehen nicht um eine Ressourcendatei für Apps handelt, obwohl sie wie eine solche strukturiert ist. Sie können einzelne Teile dieser Datei als Ausgangspunkt beim Bearbeiten von Kopien von Formatvorlagen in das XAML Ihrer App kopieren, wie von den Tools aktiviert. Sobald Sie eine solche Kopie erstellt haben, muss sie jedoch in eine der Resources-Auflistungen aufgenommen werden oder indirekt über MergedDictionaries darauf zugegriffen werden. In all diesen Fällen ist der geänderte XAML-Code, der den Standardwert überschreibt, als Teil Ihrer App enthalten.
Ein Style
definiertes Element in einem ResourceDictionary ist nicht erforderlich, um ein x:Key-Attribut oder ein x:Name-Attribut zu besitzen, was normalerweise eine Anforderung ist, um eine XAML-Ressource zu sein. Ein Style
, der auf diese Weise definiert ist, verwendet seinen TargetType-Eigenschaftswert als impliziten Schlüssel und wird als impliziter Stil bezeichnet.
Weitere Informationen zur Verwendung von XAML-Ressourcenwörterbüchern finden Sie unter ResourceDictionary und XAML-Ressourcenverweise.
Stile und Vorlagen
Sie können einen Setter in einem Style
verwenden, um Werte auf jede Abhängigkeitseigenschaft anzuwenden. Es ist jedoch die Setter
für die Template-Eigenschaft einer control-abgeleiteten Klasse, die den Großteil des XAML-Markups in einem typischen Style
darstellt. Der Wert für ein Setter
mit Property="Template"
wird fast immer als Eigenschaftselement angegeben, das ein ControlTemplate-Objektelement enthält.
Wenn ein Style
verwendet wird, um eine Steuerelementvorlage zu definieren, sollten targetType des Style
Elements und TargetType des ControlTemplate-Elements für dessen Control.Template-Setter immer den gleichen Wert verwenden.
Der Vorlagensetter definiert die grundlegende Vorlagen-UI-Definition für ein Steuerelement instance wo diese Vorlage angewendet wird. Sie enthält auch die visuellen Zustände für ein Steuerelement und andere zustandsbasierte UI-Definitionen, z. B. Standarddesignübergänge. Bei einem komplexen Steuerelement wie ListBox können der Standardvorlagenstil und die ControlTemplate in Hunderte von XAML-Zeilen enthalten. Weitere Informationen zur Rolle von Style
in Steuerelementvorlagenszenarien finden Sie unter XAML-Steuerelementvorlagen.
Die Vorlage für ein Steuerelement enthält häufig visuelle Zustände, die das Erscheinungsbild des Steuerelements als Reaktion auf logische Zustände ändern. Beispielsweise kann eine Schaltfläche eine andere visuelle Darstellung aufweisen, wenn sie durch Anwenden eines neuen visuellen Zustands aus der Vorlage gedrückt wird, und alle Darstellungsänderungen können von XAML und nicht von Code stammen. Weitere Informationen dazu, wie visuelle Zustände funktionieren und wie Sie sie ändern oder Zustände für benutzerdefinierte Steuerelemente definieren, finden Sie unter XAML-Steuerelementvorlagen.
Stile und Laufzeitverhalten
Sie können die Werte einzelner Eigenschaften ändern, die von einer Style
zur Laufzeit festgelegt wurden, und ihre neuen Werte überschreiben die Setters-Werte . Beispielsweise können Sie die Template-Eigenschaft zur Laufzeit festlegen, auch wenn diese Eigenschaft durch einen Stil festgelegt wurde.
Sie können die Eigenschaften von Style
zur Laufzeit anpassen, aber nur, wenn dieser Stil auf nichts angewendet wurde und nur als Ressource vorhanden ist, die nicht implizit verwendet wird. Sie können der Auflistung in Setters beispielsweise Setter für eine Formatvorlage hinzufügen, die in Resources mit einem x:Key-Attribut vorhanden ist, aber an anderer Stelle in XAML keinen {StaticResource}-Markuperweiterungswert aufweist, der auf diesen Stil verweist. Sobald jedoch auf einen Style verwiesen wird und von einem geladenen Objekt für Werte verwendet wird, sollte die Style
als versiegelt betrachtet werden. Sie können den versiegelten Zustand erkennen, indem Sie den Wert der IsSealed-Eigenschaft für überprüfen Style
. Wenn es true
ist, ist die Formatvorlage versiegelt, und Sie können keine Eigenschaften davon oder die Setter-Unterwerte in ändern. Der Zeitpunkt, zu dem eine Formatvorlage verwendet und versiegelt wurde, kann auch erkannt werden, wenn das Objekt, auf das verwiesen wird, Style
sein Loaded-Ereignis auslöst.
BasedOn-Formatvorlagen
Sie können eine neue Formatvorlage basierend auf einer vorhandenen Formatvorlage erstellen, die von Ihrer App definiert wird, oder auf Standardformatvorlagen für Windows-Runtime-Steuerelemente. Dazu können Sie die BasedOn-Eigenschaft verwenden. Dies reduziert die Duplizierung in Ihrem XAML-Code und erleichtert die Verwaltung von Ressourcen. Jede Formatvorlage unterstützt nur eine BasedOn
Formatvorlage. Weitere Informationen finden Sie unter BasedOn- oder Styling-Steuerelemente.
Implizite Stile
Sie können Stile so definieren, dass ein Style
implizit von allen Objekten desselben TargetType verwendet wird, ohne dass jedes instance eines solchen Objekts speziell auf den Style als FrameworkElement.Style-Wert verweisen muss. Wenn eine <Style>
Ressource in einem ResourceDictionary ohne x:Key-Attribut deklariert wird, verwendet der x:Key-Wert den Wert der TargetType
-Eigenschaft. Wenn Sie den Stil implizit festlegen, wird die Formatvorlage nur auf die Typen angewendet, die genau mit dem TargetType
übereinstimmen, und nicht auf Elemente, die TargetType
vom Wert abgeleitet sind. Wenn Sie beispielsweise implizit eine Formatvorlage für alle ToggleButton-Steuerelemente in Ihrer Anwendung erstellen und Ihre Anwendung über ToggleButton
CheckBox-Steuerelemente verfügt (CheckBox
von ToggleButton
abgeleitet), wird die implizite Formatvorlage "ToggleButton" nur auf die ToggleButton
Steuerelemente angewendet.
Hinweise zur XAML-Syntax
Setter ist die XAML-Inhaltseigenschaft für Style
, sodass Sie eine implizite Auflistungssyntax wie <Style><Setter .../><Setter .../></Style>
verwenden können.
Die Verwendung der Style
-Klasse im Code (z. B. aufrufen eines Konstruktors und Erstellen der Setter-Werte nacheinander) ist sehr selten. Stile werden für Vorlagen verwendet, und Vorlagen sollten zur XAML-Ladezeit verfügbar sein, sodass in Style
Code erstellte Elemente in der Regel zu spät verfügbar sind, um auf Steuerelemente in einer Benutzeroberfläche angewendet zu werden.
Konstruktoren
Style() |
Initialisiert eine neue instance der Style-Klasse ohne anfänglichen TargetType und ohne eine leere Setters-Auflistung. |
Style(TypeName) |
Initialisiert eine neue instance der Style-Klasse mit einem angegebenen Anfangszieltyp und einer leeren Setters-Auflistung. |
Eigenschaften
BasedOn |
Ruft einen definierten Stil ab, der die Grundlage für den aktuellen Stil ist, oder legt diesen fest. |
Dispatcher |
Gibt immer in einer Windows App SDK-App zurück |
DispatcherQueue |
Ruft den |
IsSealed |
Ruft einen Wert ab, der angibt, ob der Stil schreibgeschützt ist und nicht geändert werden kann. |
Setters |
Ruft eine Auflistung von Setter-Objekten ab. |
TargetType |
Ruft den Typ ab, für den die Formatvorlage vorgesehen ist, oder legt diese fest.
|
Methoden
ClearValue(DependencyProperty) |
Löscht den lokalen Wert einer Abhängigkeitseigenschaft. (Geerbt von DependencyObject) |
GetAnimationBaseValue(DependencyProperty) |
Gibt einen beliebigen Basiswert zurück, der für eine Abhängigkeitseigenschaft eingerichtet wurde, der in Fällen gilt, in denen eine Animation nicht aktiv ist. (Geerbt von DependencyObject) |
GetValue(DependencyProperty) |
Gibt den aktuellen effektiven Wert einer Abhängigkeitseigenschaft aus einem DependencyObject zurück. (Geerbt von DependencyObject) |
ReadLocalValue(DependencyProperty) |
Gibt den lokalen Wert einer Abhängigkeitseigenschaft zurück, wenn ein lokaler Wert festgelegt ist. (Geerbt von DependencyObject) |
RegisterPropertyChangedCallback(DependencyProperty, DependencyPropertyChangedCallback) |
Registriert eine Benachrichtigungsfunktion zum Lauschen auf Änderungen an einer bestimmten DependencyProperty für dieses DependencyObject-instance. (Geerbt von DependencyObject) |
Seal() |
Sperrt den Stil, sodass die TargetType-Eigenschaft oder ein Setter in der Setters-Auflistung nicht geändert werden kann. |
SetValue(DependencyProperty, Object) |
Legt den lokalen Wert einer Abhängigkeitseigenschaft für ein DependencyObject fest. (Geerbt von DependencyObject) |
UnregisterPropertyChangedCallback(DependencyProperty, Int64) |
Bricht eine Änderungsbenachrichtigung ab, die zuvor durch Aufrufen von RegisterPropertyChangedCallback registriert wurde. (Geerbt von DependencyObject) |