Share via


VisualStateGroup Clase

Definición

Contiene objetos VisualState mutuamente excluyentes y objetos VisualTransition que se usan para pasar de un estado a otro.

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>
Herencia
Object Platform::Object IInspectable DependencyObject VisualStateGroup
Atributos

Ejemplos

En este ejemplo se crea un controlTemplate simple para un botón que contiene una cuadrícula. También contiene un VisualStateGroup denominado "CommonStates", que define los estados "PointerOver" y "Normal". VisualStateGroup También tiene un objeto VisualTransition que especifica que tarda una mitad en Grid cambiar de verde a rojo cuando el usuario coloca el puntero sobre .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>

Comentarios

Cada VisualStateGroup uno declarado en XAML como parte de una plantilla de control siempre debe tener un atributo x:Name establecido en él. Cada cadena de nombre usada en el conjunto de VisualStateGroups en una plantilla de control debe ser única en esa plantilla. Sin embargo, es habitual usar los mismos nombres de grupo para distintos controles. Por ejemplo, casi todas las plantillas de control existentes tienen un VisualStateGroup con x:Name attribute de "CommonStates".

El conjunto de estados visuales dentro de cada VisualStateGroup uno debe ser mutuamente excluyente en el grupo. En otras palabras, el control debe usar exactamente uno de los estados visuales de cada uno de sus grupos definidos VisualStateGroup en todo momento. Siempre que haya un caso en el que un control esté destinado a estar simultáneamente en dos estados, asegúrese de que los dos estados están en grupos diferentes. Por ejemplo, es posible que un control desplegable se centre simultáneamente y que su lista desplegable esté abierta. En un diseño de estado visual correcto, tendría un estado independiente VisualStateGroup para cada estado para que ambos puedan estar activos a la vez. Estos grupos pueden tener nombres como "FocusStates" y "DropDownStates".

Siempre que defina un VisualStateGroup que habilite un comportamiento de guion gráfico temporal en uno de sus elementos VisualState , asegúrese de que el grupo también contiene un segundo VisualState al que se puede llamar para cancelar el estado anterior. Esto puede ser tan sencillo como declarar el segundo VisualState sin guion gráfico , solo un atributo x:Name.

El valor del atributo x:Name establecido para un VisualStateGroup no se usa para una llamada a VisualStateManager.GoToState; en su lugar, es el x:Name attribute de un Objeto VisualState que se usa para VisualStateManager.GoToState. Cualquier persona que use VisualStateManager.GoToState debe tener en cuenta todos los grupos y estados disponibles, de modo que cada llamada pase correctamente de estados antiguos a nuevos estados dentro de un grupo.

Además de un conjunto de elementos VisualState , también VisualStateGroup puede definir un conjunto de elementos De VisualTransition , donde cada uno VisualTransition pertenece a al menos uno de los elementos con nombre VisualState definidos en el grupo. En XAML, el conjunto de VisualState elementos se puede declarar como elementos secundarios del elemento object inmediato de VisualStateGroup. Esto es posible porque la propiedad States , que es la colección de estados visuales, es la propiedad de contenido XAML para VisualStateGroup. Por el contrario, para establecer la colección de transiciones visuales, debes declarar esa colección dentro de un elemento de propiedad VisualStateGroup.Transitions en XAML. Para obtener más información sobre las propiedades de contenido XAML, consulta la guía de sintaxis XAML.

Al usar StateTriggers para controlar los estados visuales, el motor de desencadenador usa las siguientes reglas de precedencia para puntuar desencadenadores y determinar qué desencadenador, y el valor de VisualState correspondiente, estará activo:

  1. Desencadenador personalizado que deriva de StateTriggerBase
  2. AdaptiveTrigger activado debido a MinWindowWidth
  3. AdaptiveTrigger activado debido a MinWindowHeight

Si hay varios desencadenadores activos a la vez que tienen un conflicto en la puntuación (es decir, dos desencadenadores personalizados activos), el primero declarado en el archivo de marcado tiene prioridad.

Nota: Aunque AdaptiveTrigger deriva de StateTriggerBase, solo se puede activar mediante la configuración de MinWindowWidth o MinWindowHeight.

VisualStateGroup API que admiten la implementación personalizada de VisualStateManager

Muchas de las API de VisualStateGroup solo existen para admitir la implementación personalizada de VisualStateManager . Estos incluyen: Name, CurrentState, CurrentStateChanging, CurrentStateChanged. Los usos más comunes de estados visuales para las plantillas de control no necesitarán estas API. En concreto, no es habitual controlar los eventos. La mayoría de las operaciones lógicas de un control deben implicar sus propias propiedades y eventos. En la mayoría de los escenarios de definición de aplicaciones y controles, los cambios de estado visual que se producen en el control solo deben ser un resultado final de la lógica que el control aplica a su plantilla, no un desencadenador para otra lógica.

Constructores

VisualStateGroup()

Inicializa una nueva instancia de la clase VisualStateGroup .

Propiedades

CurrentState

Obtiene el conjunto más reciente de VisualState de una llamada correcta al método GoToState .

Dispatcher

Siempre devuelve null en una aplicación de SDK de Aplicaciones para Windows. Use DispatcherQueue en su lugar.

(Heredado de DependencyObject)
DispatcherQueue

Obtiene el objeto DispatcherQueue al que está asociado este objeto. DispatcherQueue representa una instalación que puede acceder al DependencyObject en el subproceso de interfaz de usuario incluso si un subproceso que no es de interfaz de usuario inicia el código.

(Heredado de DependencyObject)
Name

Obtiene el nombre del objeto VisualStateGroup.

States

Obtiene la colección de objetos VisualState mutuamente excluyentes.

Transitions

Obtiene la colección de objetos VisualTransition .

Métodos

ClearValue(DependencyProperty)

Borra el valor local de una propiedad de dependencia.

(Heredado de DependencyObject)
GetAnimationBaseValue(DependencyProperty)

Devuelve cualquier valor base establecido para una propiedad de dependencia, que se aplicaría en los casos en los que una animación no está activa.

(Heredado de DependencyObject)
GetValue(DependencyProperty)

Devuelve el valor efectivo actual de una propiedad de dependencia de dependencyObject.

(Heredado de DependencyObject)
ReadLocalValue(DependencyProperty)

Devuelve el valor local de una propiedad de dependencia, si se establece un valor local.

(Heredado de DependencyObject)
RegisterPropertyChangedCallback(DependencyProperty, DependencyPropertyChangedCallback)

Registra una función de notificación para escuchar los cambios en una dependencyProperty específica en esta instancia de DependencyObject .

(Heredado de DependencyObject)
SetValue(DependencyProperty, Object)

Establece el valor local de una propiedad de dependencia en dependencyObject.

(Heredado de DependencyObject)
UnregisterPropertyChangedCallback(DependencyProperty, Int64)

Cancela una notificación de cambio registrada anteriormente llamando a RegisterPropertyChangedCallback.

(Heredado de DependencyObject)

Eventos

CurrentStateChanged

Se produce después de que un control cambie a un estado diferente.

CurrentStateChanging

Se produce cuando un control comienza a cambiar a un estado diferente.

Se aplica a

Consulte también