Partage via


VisualStateGroup Classe

Définition

Contient des objets VisualState mutuellement exclusifs et des objets VisualTransition qui sont utilisés pour passer d’un état à un autre.

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>
Héritage
Object Platform::Object IInspectable DependencyObject VisualStateGroup
Attributs

Configuration requise pour Windows

Famille d’appareils
Windows 10 (introduit dans 10.0.10240.0)
API contract
Windows.Foundation.UniversalApiContract (introduit dans v1.0)

Exemples

Cet exemple crée un ControlTemplate simple pour un Button qui contient une grille. Il contient également un VisualStateGroup appelé « CommonStates », qui définit les états « PointerOver » et « Normal ». VisualStateGroup a également un VisualTransition qui spécifie qu’il faut une demi-seconde pour que la grille passe du vert au rouge lorsque l’utilisateur place le pointeur sur le bouton.

<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>

Remarques

Chaque VisualStateGroup déclaré en XAML dans le cadre d’un modèle de contrôle doit toujours avoir un attribut x:Name défini dessus. Chaque chaîne de nom utilisée dans l’ensemble de VisualStateGroups dans un modèle de contrôle doit être unique dans ce modèle. Il est courant d’utiliser les mêmes noms de groupe pour différents contrôles. Par exemple, presque tous les modèles de contrôle existants ont un VisualStateGroup avec l’attribut x:Name « CommonStates ».

L’ensemble des états visuels dans chaque VisualStateGroup doit s’exclure mutuellement dans le groupe. En d’autres termes, le contrôle doit utiliser exactement l’un des états visuels de chacun de ses groupes VisualStateGroup définis à tout moment. Chaque fois qu’un contrôle est destiné à être simultanément dans deux états, assurez-vous que les deux états se trouvent dans des groupes différents. Par exemple, il est possible qu’un contrôle de liste déroulante soit simultanément concentré et que sa liste déroulante soit ouverte. Dans une conception d’état visuel correcte, vous disposeriez d’un VisualStateGroup distinct pour chaque état afin qu’ils puissent tous les deux être actifs à la fois. Ces groupes peuvent avoir des noms tels que « FocusStates » et « DropDownStates ».

Chaque fois que vous définissez un VisualStateGroup qui active un comportement temporaire de table de montage séquentiel dans l’un de ses éléments VisualState , assurez-vous que le groupe contient également un deuxième VisualState qui peut être appelé pour annuler l’état précédent. Cela peut être aussi simple que de déclarer le deuxième VisualState sans storyboard du tout, juste un attribut x:Name.

La valeur d’attribut x:Name que vous définissez pour un VisualStateGroup n’est pas utilisée pour un appel à VisualStateManager.GoToState ; au lieu de cela, il s’agit de l’attribut x:Name d’un VisualState qui est utilisé pour VisualStateManager.GoToState. Toute personne qui utilise VisualStateManager.GoToState doit connaître tous les groupes et états disponibles, afin que chaque appel passe correctement des anciens états aux nouveaux états au sein d’un groupe.

En plus d’un ensemble d’éléments VisualState , un VisualStateGroup peut également définir un ensemble d’éléments VisualTransition , où chaque VisualTransition se rapporte à au moins l’un des éléments VisualState nommés définis dans le groupe. En XAML, l’ensemble d’éléments VisualState peut être déclaré en tant qu’éléments enfants de l’élément objet immédiat de VisualStateGroup. Cela est possible, car la propriété States , qui est la collection d’états visuels, est la propriété de contenu XAML pour VisualStateGroup. En revanche, pour définir la collection de transitions visuelles, vous devez déclarer cette collection dans un élément de propriété VisualStateGroup.Transitions en XAML. Pour plus d’informations sur les propriétés de contenu XAML, consultez le Guide de syntaxe XAML.

Lorsque vous utilisez StateTriggers pour contrôler les états visuels, le moteur de déclencheur utilise les règles de précédence suivantes pour noter les déclencheurs et déterminer quel déclencheur, ainsi que le VisualState correspondant, sera actif :

  1. Déclencheur personnalisé qui dérive de StateTriggerBase
  2. AdaptiveTrigger activé en raison de MinWindowWidth
  3. AdaptiveTrigger activé en raison de MinWindowHeight

S’il existe plusieurs déclencheurs actifs à la fois qui ont un conflit dans le scoring (c’est-à-dire deux déclencheurs personnalisés actifs), le premier déclaré dans le fichier de balisage est prioritaire.

Remarque : Bien qu’AdaptiveTrigger dérive de StateTriggerBase, il ne peut être activé qu’en définissant MinWindowWidth et/ou MinWindowHeight.

VisualStateGroup API qui prend en charge l’implémentation personnalisée de VisualStateManager

La plupart des API de VisualStateGroup existent uniquement pour prendre en charge l’implémentation personnalisée de VisualStateManager . Il s’agit notamment de : Name, CurrentState, CurrentStateChanging, CurrentStateChanged. La plupart des utilisations courantes des états visuels pour les modèles de contrôle n’auront pas besoin de ces API. En particulier, il n’est pas courant de gérer les événements. La plupart des opérations logiques d’un contrôle doivent impliquer ses propres propriétés et événements. Pour la plupart des scénarios de définition d’application et de contrôle, les changements d’état visuel qui se produisent sur le contrôle ne doivent être qu’un résultat final de la logique que le contrôle applique à son modèle, et non un déclencheur pour une autre logique.

Constructeurs

VisualStateGroup()

Initialise une nouvelle instance de la classe VisualStateGroup.

Propriétés

CurrentState

Obtient la dernière définition de VisualState à partir d’un appel réussi à la méthode GoToState .

Dispatcher

Obtient le CoreDispatcher auquel cet objet est associé. CoreDispatcher représente une fonctionnalité qui peut accéder à DependencyObject sur le thread d’interface utilisateur, même si le code est initié par un thread autre que l’interface utilisateur.

(Hérité de DependencyObject)
Name

Obtient le nom du VisualStateGroup.

States

Obtient la collection d’objets VisualState mutuellement exclusifs.

Transitions

Obtient la collection d’objets VisualTransition .

Méthodes

ClearValue(DependencyProperty)

Efface la valeur locale d’une propriété de dépendance.

(Hérité de DependencyObject)
GetAnimationBaseValue(DependencyProperty)

Retourne toute valeur de base établie pour une propriété de dépendance, qui s’appliquerait dans les cas où une animation n’est pas active.

(Hérité de DependencyObject)
GetValue(DependencyProperty)

Retourne la valeur effective actuelle d’une propriété de dépendance à partir d’un DependencyObject.

(Hérité de DependencyObject)
ReadLocalValue(DependencyProperty)

Retourne la valeur locale d’une propriété de dépendance, si une valeur locale est définie.

(Hérité de DependencyObject)
RegisterPropertyChangedCallback(DependencyProperty, DependencyPropertyChangedCallback)

Inscrit une fonction de notification pour écouter les modifications apportées à un DependencyProperty spécifique sur ce instance DependencyObject.

(Hérité de DependencyObject)
SetValue(DependencyProperty, Object)

Définit la valeur locale d’une propriété de dépendance sur un DependencyObject.

(Hérité de DependencyObject)
UnregisterPropertyChangedCallback(DependencyProperty, Int64)

Annule une notification de modification précédemment inscrite en appelant RegisterPropertyChangedCallback.

(Hérité de DependencyObject)

Événements

CurrentStateChanged

Se produit après qu’un contrôle passe à un état différent.

CurrentStateChanging

Se produit lorsqu’un contrôle commence à passer à un état différent.

S’applique à

Voir aussi