Share via


VisualStateGroup Klasse

Definition

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
Object Platform::Object IInspectable DependencyObject VisualStateGroup
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 Buttonlegt.

<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.GoToStateverwendet 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 VisualStateGroupdeklariert 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 VisualStateGroupist. 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:

  1. Benutzerdefinierter Trigger, der von StateTriggerBase abgeleitet wird
  2. AdaptiveTrigger wurde durch MinWindowWidth aktiviert
  3. 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ücknull. Verwenden Sie stattdessen DispatcherQueue .

(Geerbt von DependencyObject)
DispatcherQueue

Ruft den DispatcherQueue ab, dem dieses Objekt zugeordnet ist. Stellt DispatcherQueue eine Funktion dar, die auf den DependencyObject im UI-Thread zugreifen kann, auch wenn der Code von einem Nicht-UI-Thread initiiert wird.

(Geerbt von DependencyObject)
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.

Gilt für:

Weitere Informationen