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 zu einem 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. Sie enthält auch einen VisualStateGroup sogenannten "CommonStates", der die Zustände "PointerOver" und "Normal" definiert. Außerdem VisualStateGroup verfügt die VisualTransition über eine VisualTransition , die angibt, dass es eine Halbe Sekunde dauert, bis der Grid Zeiger von Grün in Rot geändert wird, wenn der Benutzer den Zeiger übergibt Button.
<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
Jede VisualStateGroup in XAML als Teil einer Steuerelementvorlage deklarierte Datei sollte immer über ein x:Name-Attribut verfügen, das darauf festgelegt ist. Jede in der Gruppe einer VisualStateGroups Steuerelementvorlage verwendete Namenszeichenfolge muss in dieser Vorlage eindeutig sein. Es ist üblich, die gleichen Gruppennamen für verschiedene Steuerelemente zu verwenden. Beispielsweise verfügen fast alle vorhandenen Steuerelementvorlagen über eine "CommonStates".For example, fast all existing control templates have a VisualStateGroup with x:Name attribute "CommonStates".
Der Satz visueller Zustände innerhalb der einzelnen VisualStateGroup Sollte sich gegenseitig in der Gruppe ausschließen. Mit anderen Worten, das Steuerelement sollte immer genau einen der visuellen Zustände aus jeder der definierten VisualStateGroup Gruppen verwenden. Wenn es einen Fall gibt, in dem ein Steuerelement in zwei Zuständen gleichzeitig verwendet werden soll, stellen Sie sicher, dass sich die beiden Zustände in unterschiedlichen Gruppen befinden. So ist es beispielsweise möglich, dass ein Dropdown-Steuerelement gleichzeitig fokussiert und die Dropdownliste geöffnet ist. In einem korrekten Entwurfsentwurf für visuelle Zustände verfügen Sie für jeden Zustand über eine separate VisualStateGroup Zustände, damit beide gleichzeitig aktiv sein können. Solche Gruppen haben möglicherweise Namen wie "FocusStates" und "DropDownStates".
Wenn Sie ein VisualStateGroup Objekt definieren, das ein temporäres Storyboardverhalten in einem seiner VisualState-Elemente ermöglicht, stellen Sie sicher, dass die Gruppe auch eine Sekunde VisualState enthält, die aufgerufen werden kann, um den vorherigen Zustand abzubrechen. Dies kann so einfach sein, wie das zweite VisualState ohne Storyboard deklarieren, nur ein x:Name-Attribut.
Der x:Name-Attributwert , den Sie für ein VisualStateGroup Attribut festlegen, wird nicht für einen Aufruf von VisualStateManager.GoToState verwendet; stattdessen ist er der x:Name attribute eines VisualState,der für VisualStateManager.GoToState. Jeder, der verwendet VisualStateManager.GoToState wird, sollte sich über alle verfügbaren Gruppen und Zustände bewusst sein, damit jeder Aufruf ordnungsgemäß von alten Zuständen zu neuen Zuständen innerhalb einer Gruppe wechselt.
Zusätzlich zu einer Gruppe von VisualState-Elementen kann ein VisualStateGroup Satz von VisualTransition-Elementen auch definiert werden, wobei jedes VisualTransition element auf mindestens eines der benannten VisualState Elemente in der Gruppe gehört. In XAML kann der Satz von VisualState Elementen als untergeordnete Direktobjektelementelemente der VisualStateGroup. Dies ist möglich, da die States-Eigenschaft , die die Sammlung visueller Zustände ist, die XAML-Inhaltseigenschaft für VisualStateGroup. Um die Auflistung visueller Übergänge festzulegen, müssen Sie diese Auflistung in einem VisualStateGroup.Transitions-Eigenschaftselement in XAML deklarieren. Weitere Informationen zu XAML-Inhaltseigenschaften finden Sie in der XAML-Syntaxanleitung.
Wenn Sie StateTriggers zum Steuern visueller Zustände verwenden, verwendet das Triggermodul die folgenden Rangfolgeregeln, um Trigger zu scoren und zu bestimmen, welcher Trigger und der entsprechende VisualState aktiv sind:
- Benutzerdefinierter Trigger, der von StateTriggerBase abgeleitet wird
- AdaptiveTrigger aufgrund von MinWindowWidth aktiviert
- AdaptiveTrigger aufgrund von MinWindowHeight aktiviert
Wenn mehrere aktive Trigger gleichzeitig vorhanden sind, die einen Konflikt bei der Bewertung aufweisen (d. h. zwei aktive benutzerdefinierte Trigger), hat die erste, die in der Markupdatei deklariert wurde, Vorrang.
Hinweis: Während AdaptiveTrigger von StateTriggerBase abgeleitet wird, kann es nur durch Festlegen von MinWindowWidth und/oder MinWindowHeight aktiviert werden.
Visualstategroup API zur Unterstützung der benutzerdefinierten VisualStateManager-Implementierung
Viele der API sind VisualStateGroup nur vorhanden, um die benutzerdefinierte VisualStateManager-Implementierung zu unterstützen. Dazu gehören: Name, CurrentState, CurrentStateChanging, CurrentStateChanged. Die häufigsten Verwendungen visueller Zustände für Steuerelementvorlagen benötigen diese API nicht. Insbesondere ist es nicht typisch, die Ereignisse zu behandeln. Die meisten Logikvorgänge für ein Steuerelement sollten eigene Eigenschaften und Ereignisse umfassen. Für die meisten App- und Steuerelementdefinitionsszenarien sollten Änderungen des visuellen Zustands, die mit dem Steuerelement geschehen, nur ein Endergebnis der Logik sein, die das Steuerelement auf seine Vorlage anwendet, nicht ein Trigger für andere Logik.
Konstruktoren
| Name | Beschreibung |
|---|---|
| VisualStateGroup() |
Initialisiert eine neue Instanz der VisualStateGroup-Klasse . |
Eigenschaften
| Name | Beschreibung |
|---|---|
| CurrentState |
Ruft den zuletzt festgelegten VisualState von einem erfolgreichen Aufruf der GoToState -Methode ab. |
| Dispatcher |
Gibt immer in einer Windows App SDK-App zurück |
| DispatcherQueue |
Ruft ab |
| Name |
Ruft den Namen der VisualStateGroup ab. |
| States |
Ruft die Auflistung sich gegenseitig ausschließender VisualState -Objekte ab. |
| Transitions |
Ruft die Auflistung von VisualTransition -Objekten ab. |
Methoden
| Name | Beschreibung |
|---|---|
| ClearValue(DependencyProperty) |
Löscht den lokalen Wert einer Abhängigkeitseigenschaft. (Geerbt von DependencyObject) |
| GetAnimationBaseValue(DependencyProperty) |
Gibt einen Basiswert zurück, der für eine Abhängigkeitseigenschaft eingerichtet wurde, was in Fällen angewendet wird, 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 wird. (Geerbt von DependencyObject) |
| RegisterPropertyChangedCallback(DependencyProperty, DependencyPropertyChangedCallback) |
Registriert eine Benachrichtigungsfunktion, um Änderungen an einer bestimmten DependencyProperty für diese DependencyObject-Instanz zu überwachen. (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 durch Aufrufen von RegisterPropertyChangedCallback registriert wurde. (Geerbt von DependencyObject) |
Ereignisse
| Name | Beschreibung |
|---|---|
| CurrentStateChanged |
Tritt ein, nachdem ein Steuerelement in einen anderen Zustand geändert wurde. |
| CurrentStateChanging |
Tritt auf, wenn ein Steuerelement beginnt, in einen anderen Zustand zu wechseln. |