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
/// [Windows.Foundation.Metadata.Activatable(65536, Windows.Foundation.UniversalApiContract)]
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.UniversalApiContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
/// [Windows.UI.Xaml.Markup.ContentProperty(Name="States")]
class VisualStateGroup final : DependencyObject
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.UniversalApiContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
/// [Windows.UI.Xaml.Markup.ContentProperty(Name="States")]
/// [Windows.Foundation.Metadata.Activatable(65536, "Windows.Foundation.UniversalApiContract")]
class VisualStateGroup final : DependencyObject
[Windows.Foundation.Metadata.Activatable(65536, typeof(Windows.Foundation.UniversalApiContract))]
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.UniversalApiContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
[Windows.UI.Xaml.Markup.ContentProperty(Name="States")]
public sealed class VisualStateGroup : DependencyObject
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.UniversalApiContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
[Windows.UI.Xaml.Markup.ContentProperty(Name="States")]
[Windows.Foundation.Metadata.Activatable(65536, "Windows.Foundation.UniversalApiContract")]
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

Windows-Anforderungen

Gerätefamilie
Windows 10 (eingeführt in 10.0.10240.0)
API contract
Windows.Foundation.UniversalApiContract (eingeführt in v1.0)

Beispiele

In diesem Beispiel wird eine einfache ControlTemplate für eine Schaltfläche erstellt, die ein Raster enthält. Es enthält auch eine VisualStateGroup namens "CommonStates", die die Zustände "PointerOver" und "Normal" definiert. VisualStateGroup verfügt auch über eine VisualTransition , die angibt, dass es eine halbe Sekunde dauert, bis sich das Raster von grün in rot ändert, wenn der Benutzer den Zeiger auf die Schaltfläche 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

Jede visualStateGroup, die als Teil einer Steuerelementvorlage in XAML deklariert wurde, sollte immer über 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 dem x:Name-Attribut "CommonStates".

Der Satz von visuellen Zuständen innerhalb jeder VisualStateGroup sollte sich in der Gruppe gegenseitig ausschließen. Anders ausgedrückt: Das Steuerelement sollte jederzeit genau einen der visuellen Zustände aus jeder seiner 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. In einem richtigen visuellen Zustandsentwurf verfügen Sie über eine separate VisualStateGroup für jeden Zustand, sodass beide gleichzeitig aktiv sein können. Solche Gruppen können Namen wie "FocusStates" und "DropDownStates" haben.

Wenn Sie eine VisualStateGroup definieren, die ein temporäres Storyboardverhalten in einem seiner VisualState-Elemente aktiviert, stellen Sie sicher, dass die Gruppe auch einen zweiten VisualState enthält, der aufgerufen werden kann, um den vorherigen Zustand abzubrechen. Dies kann so einfach sein wie das Deklarieren des zweiten VisualState ohne Storyboard , nur ein x:Name-Attribut.

Der x:Name-Attributwert , den Sie für eine VisualStateGroup festlegen, wird nicht für einen Aufruf von VisualStateManager.GoToState verwendet. stattdessen ist es das x:Name-Attribut eines VisualState-Elements , das für VisualStateManager.GoToState verwendet wird. Jeder, der VisualStateManager.GoToState verwendet, sollte alle verfügbaren Gruppen und Zustände kennen, damit jeder Aufruf ordnungsgemäß von alten zu neuen Zuständen innerhalb einer Gruppe übergeht.

Zusätzlich zu einer Reihe von VisualState-Elementen kann eine VisualStateGroup auch einen Satz von VisualTransition-Elementen definieren, wobei sich jede 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 der 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:

  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

Ruft den CoreDispatcher ab, dem dieses Objekt zugeordnet ist. CoreDispatcher stellt eine Funktion dar, die auf das 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