Compartir a través de


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

Requisitos de Windows

Familia de dispositivos
Windows 10 (se introdujo en la versión 10.0.10240.0)
API contract
Windows.Foundation.UniversalApiContract (se introdujo en la versión v1.0)

Ejemplos

En este ejemplo se crea un controlTemplate simple para un botón que contiene una cuadrícula. También contiene un objeto VisualStateGroup denominado "CommonStates", que define los estados "PointerOver" y "Normal". VisualStateGroup también tiene una visualTransition que especifica que tarda un segundo en cambiar de verde a rojo cuando el usuario coloca el puntero sobre el botón.

<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 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 de 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 objeto VisualStateGroup con el atributo x:Name de "CommonStates".

El conjunto de estados visuales dentro de cada VisualStateGroup 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 de VisualStateGroup definidos 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 visualStateGroup independiente 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 Objeto VisualStateGroup que permita un comportamiento de guion gráfico temporal en uno de sus elementos VisualState, asegúrese de que el grupo también contiene un segundo objeto 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 atributo x:Name 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 , un Objeto VisualStateGroup también puede definir un conjunto de elementos de VisualTransition , donde cada Objeto VisualTransition pertenece al menos a uno de los elementos denominados VisualState definidos en el grupo. En XAML, el conjunto de elementos VisualState se puede declarar como elementos secundarios de elemento de objeto 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

Obtiene el CoreDispatcher al que está asociado este objeto. CoreDispatcher representa una instalación que puede tener acceso a 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