VisualStateGroup 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 sich gegenseitig ausschließende VisualState-Objekte und VisualTransition-Objekte , die verwendet werden, um von einem Zustand in einen anderen zu wechseln.
public ref class VisualStateGroup sealed : DependencyObject
/// [Microsoft.UI.Xaml.Markup.ContentProperty(Name="States")]
/// [Windows.Foundation.Metadata.Activatable(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 VisualStateGroup final : DependencyObject
[Microsoft.UI.Xaml.Markup.ContentProperty(Name="States")]
[Windows.Foundation.Metadata.Activatable(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 VisualStateGroup : DependencyObject
Public NotInheritable Class VisualStateGroup
Inherits DependencyObject
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="groupname" ...>
oneOrMoreVisualStates
</VisualStateGroup>
<!--- other peer VisualStateGroup's here ... -->
</VisualStateManager.VisualStateGroups>
- Vererbung
- Attribute
Beispiele
In diesem Beispiel wird eine einfache ControlTemplate für eine Schaltfläche erstellt, die ein Raster enthält. Es enthält auch einen VisualStateGroup
namens "CommonStates", der die Zustände "PointerOver" und "Normal" definiert. Der VisualStateGroup
verfügt auch über eine VisualTransition , die angibt, dass es eine halbe Sekunde dauert, bis der Grid
von grün in rot wechselt, wenn der Benutzer den Zeiger auf den Button
legt.
<ControlTemplate TargetType="Button">
<Grid >
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="CommonStates">
<VisualStateGroup.Transitions>
<!--Take one half second to transition to the PointerOver state.-->
<VisualTransition To="PointerOver"
GeneratedDuration="0:0:0.5"/>
</VisualStateGroup.Transitions>
<VisualState x:Name="Normal" />
<!--Change the SolidColorBrush, ButtonBrush, to red when the
Pointer is over the button.-->
<VisualState x:Name="PointerOver">
<Storyboard>
<ColorAnimation Storyboard.TargetName="ButtonBrush"
Storyboard.TargetProperty="Color" To="Red" />
</Storyboard>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<Grid.Background>
<SolidColorBrush x:Name="ButtonBrush" Color="Green"/>
</Grid.Background>
</Grid>
</ControlTemplate>
Hinweise
Für jede VisualStateGroup
in XAML als Teil einer Steuerelementvorlage deklarierte Datei sollte immer ein x:Name-Attribut festgelegt sein. Jede im Satz von VisualStateGroups
in einer Steuerelementvorlage verwendete Namenszeichenfolge muss in dieser Vorlage eindeutig sein. Es ist jedoch üblich, dieselben Gruppennamen für verschiedene Steuerelemente zu verwenden. Beispielsweise verfügen fast alle vorhandenen Steuerelementvorlagen über eine VisualStateGroup
mit x:Name attribute
von "CommonStates".
Die Gruppe der visuellen Zustände innerhalb der einzelnen VisualStateGroup
sollte sich in der Gruppe gegenseitig ausschließen. Anders ausgedrückt: Das Steuerelement sollte jederzeit genau einen der visuellen Zustände aus jeder der definierten VisualStateGroup
Gruppen verwenden. Wenn es einen Fall gibt, in dem ein Steuerelement gleichzeitig in zwei Zuständen sein soll, stellen Sie sicher, dass sich die beiden Zustände in unterschiedlichen Gruppen befinden. Beispielsweise ist es möglich, dass ein Dropdownsteuerelement gleichzeitig fokussiert und das Dropdownmenü geöffnet wird. Bei einem korrekten Entwurf des visuellen Zustands verfügen Sie über eine separate VisualStateGroup
Für jeden Zustand, damit beide gleichzeitig aktiv sein können. Solche Gruppen können Namen wie "FocusStates" und "DropDownStates" haben.
Wenn Sie ein VisualStateGroup
definieren, das ein temporäres Storyboardverhalten in einem seiner VisualState-Elemente ermöglicht, stellen Sie sicher, dass die Gruppe auch eine Zweite VisualState
enthält, die aufgerufen werden kann, um den vorherigen Zustand abzubrechen. Dies kann so einfach sein, wie das Deklarieren des zweiten VisualState
mit überhaupt keinem Storyboard , nur einem x:Name-Attribut.
Der x:Name-Attributwert , den Sie für einen VisualStateGroup
festlegen, wird nicht für einen Aufruf von VisualStateManager.GoToState verwendet. Stattdessen handelt es sich um den x:Name attribute
wert eines VisualState,der für VisualStateManager.GoToState
verwendet wird. Jeder, der verwendet VisualStateManager.GoToState
, sollte alle verfügbaren Gruppen und Zustände kennen, damit jeder Aufruf ordnungsgemäß von alten zu neuen Zuständen innerhalb einer Gruppe überwechselt.
Zusätzlich zu einer Reihe von VisualState-Elementen kann ein VisualStateGroup
auch einen Satz von VisualTransition-Elementen definieren, wobei jedes VisualTransition
auf mindestens eines der benannten VisualState
Elemente bezieht, die in der Gruppe definiert sind. In XAML kann der Satz von VisualState
Elementen als untergeordnete Elemente des unmittelbaren Objektelements VisualStateGroup
deklariert werden. Dies ist möglich, da die States-Eigenschaft , bei der es sich um die Auflistung von visuellen Zuständen handelt, die XAML-Inhaltseigenschaft für VisualStateGroup
ist. Zum Festlegen der Auflistung visueller Übergänge müssen Sie diese Sammlung hingegen in einem VisualStateGroup.Transitions-Eigenschaftselement in XAML deklarieren. Weitere Informationen zu XAML-Inhaltseigenschaften finden Sie unter XAML-Syntaxhandbuch.
Wenn Sie StateTriggers verwenden, um visuelle Zustände zu steuern, verwendet die Trigger-Engine die folgenden Rangfolgeregeln, um Trigger zu beurteilen und zu bestimmen, welcher Trigger und der entsprechende VisualState aktiv sein werden:
- Benutzerdefinierter Trigger, der von StateTriggerBase abgeleitet wird
- AdaptiveTrigger wurde durch MinWindowWidth aktiviert
- AdaptiveTrigger wurde aufgrund von MinWindowHeight aktiviert
Wenn mehrere aktive Trigger gleichzeitig vorhanden sind, die einen Konflikt in der Bewertung aufweisen (d. h. zwei aktive benutzerdefinierte Trigger), hat der erste in der Markupdatei deklarierte Trigger Vorrang.
Hinweis: AdaptiveTrigger leitet sich zwar von StateTriggerBase ab, kann aber nur durch Festlegen von MinWindowWidth und/oder MinWindowHeight aktiviert werden.
Visualstategroup API, die benutzerdefinierte VisualStateManager-Implementierung unterstützt
Viele der API von VisualStateGroup
sind nur vorhanden, um die benutzerdefinierte VisualStateManager-Implementierung zu unterstützen. Dazu gehören: Name, CurrentState, CurrentStateChanging, CurrentStateChanged. Für die meisten gängigen Verwendungen von visuellen Zuständen für Steuerelementvorlagen ist diese API nicht erforderlich. Insbesondere ist es nicht typisch, die Ereignisse zu behandeln. Die meisten Logikvorgänge für ein Steuerelement sollten eigene Eigenschaften und Ereignisse umfassen. Bei den meisten Anwendungs- und Steuerelementdefinitionsszenarien sollten Änderungen des visuellen Zustands, die am Steuerelement vorgenommen werden, nur ein Endergebnis der Logik sein, die das Steuerelement auf seine Vorlage anwendet, und kein Trigger für andere Logik.
Konstruktoren
VisualStateGroup() |
Initialisiert eine neue instance der VisualStateGroup-Klasse. |
Eigenschaften
CurrentState |
Ruft das zuletzt festgelegte VisualState aus einem erfolgreichen Aufruf der GoToState-Methode ab. |
Dispatcher |
Gibt immer in einer Windows App SDK-App zurück |
DispatcherQueue |
Ruft den |
Name |
Ruft den Namen der VisualStateGroup ab. |
States |
Ruft die Auflistung von sich gegenseitig ausschließenden VisualState-Objekten ab. |
Transitions |
Ruft die Auflistung von VisualTransition-Objekten ab. |
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 festgelegt wurde, was 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) |
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 registriert wurde, indem RegisterPropertyChangedCallback aufgerufen wurde. (Geerbt von DependencyObject) |
Ereignisse
CurrentStateChanged |
Tritt auf, nachdem ein Steuerelement in einen anderen Zustand wechselt. |
CurrentStateChanging |
Tritt auf, wenn ein Steuerelement beginnt, sich in einen anderen Zustand zu ändern. |