Para ver el artículo en inglés, active la casilla Inglés. También puede ver el texto en inglés en una ventana emergente si pasa el puntero del mouse por el texto.
Traducción
Inglés
Esta documentación está archivada y no tiene mantenimiento.

VisualStateManager (Clase)

Administra los estados y la lógica para la transición de un estado a otro de los controles.

Espacio de nombres:  System.Windows
Ensamblado:  PresentationFramework (en PresentationFramework.dll)
XMLNS para XAML: http://schemas.microsoft.com/winfx/2006/xaml/presentation, http://schemas.microsoft.com/netfx/2007/xaml/presentation

public class VisualStateManager : DependencyObject
<VisualStateManager .../>

El tipo VisualStateManager expone los siguientes miembros.

  NombreDescripción
Método públicoVisualStateManagerInicializa una nueva instancia de la clase VisualStateManager.
Arriba

  NombreDescripción
Propiedad públicaDependencyObjectTypeObtiene el objeto DependencyObjectType que ajusta el tipo CLR de esta instancia.  (Se hereda de DependencyObject).
Propiedad públicaDispatcherObtiene el objeto Dispatcher al que está asociado DispatcherObject. (Se hereda de DispatcherObject).
Propiedad públicaIsSealedObtiene un valor que indica si esta instancia está actualmente sellada (es de solo lectura). (Se hereda de DependencyObject).
Arriba

  NombreDescripción
Propiedad pública asociadaCustomVisualStateManagerObtiene o establece el objeto VisualStateManager que realiza la transición entre los estados de un control.
Propiedad pública asociadaVisualStateGroupsObtiene o establece una colección de objetos VisualStateGroup.
Arriba

  NombreDescripción
Método públicoCheckAccess Determina si el subproceso de la llamada tiene acceso a este DispatcherObject. (Se hereda de DispatcherObject).
Método públicoClearValue(DependencyProperty) Borra el valor local de una propiedad. La propiedad que se borrará se especifica mediante un identificador de DependencyProperty. (Se hereda de DependencyObject).
Método públicoClearValue(DependencyPropertyKey) Borra el valor local de una propiedad de sólo lectura. La propiedad que se borrará es especificada por DependencyPropertyKey. (Se hereda de DependencyObject).
Método públicoCoerceValue Fuerza el valor de propiedad de la dependencia especificada. Esto se logra a cualquier función de CoerceValueCallback especificada en los metadatos de propiedad para la propiedad de dependencia tal como existe en el objeto DependencyObject que llama. (Se hereda de DependencyObject).
Método públicoEquals Determina si un DependencyObject proporcionado es equivalente a DependencyObject actual. (Se hereda de DependencyObject).
Método protegidoFinalize Permite que un objeto intente liberar recursos y realizar otras operaciones de limpieza antes de ser reclamado por el recolector de basura. (Se hereda de Object).
Método públicoMiembro estáticoGetCustomVisualStateManagerObtiene la propiedad adjunta CustomVisualStateManager.
Método públicoGetHashCode Obtiene un código hash para este DependencyObject. (Se hereda de DependencyObject).
Método públicoGetLocalValueEnumeratorCrea un enumerador especializado para determinar qué propiedades de dependencia han establecido localmente los valores en DependencyObject. (Se hereda de DependencyObject).
Método públicoGetType Obtiene el Type de la instancia actual. (Se hereda de Object).
Método públicoGetValue Devuelve el valor efectivo actual de propiedad de dependencia en esta instancia de DependencyObject. (Se hereda de DependencyObject).
Método públicoMiembro estáticoGetVisualStateGroupsObtiene la propiedad adjunta VisualStateManager.VisualStateGroups.
Método públicoMiembro estáticoGoToElementStateRealiza la transición del elemento entre dos estados. Utilice este método para la transición de estados definidos por una aplicación, en lugar de definidos por un control.
Método públicoMiembro estáticoGoToStateRealiza la transición del control entre dos estados. Use este método para pasar de un estado a otro los controles que tengan ControlTemplate.
Método protegidoGoToStateCoreRealiza la transición de un control entre estados.
Método públicoInvalidatePropertyVuelve a evaluar el valor efectivo para la propiedad de dependencia especificada. (Se hereda de DependencyObject).
Método protegidoMemberwiseClone Crea una copia superficial del Object actual. (Se hereda de Object).
Método protegidoOnPropertyChanged Invocado siempre que el valor efectivo de cualquier propiedad de dependencia en este DependencyObject se haya actualizado. Se informa de la propiedad de dependencia concreta que cambió en los datos de evento. (Se hereda de DependencyObject).
Método protegidoRaiseCurrentStateChangedGenera el evento CurrentStateChanging en el objeto VisualStateGroup especificado.
Método protegidoRaiseCurrentStateChangingGenera el evento CurrentStateChanging en el objeto VisualStateGroup especificado.
Método públicoReadLocalValue Devuelve el valor local de propiedad de dependencia, si existe. (Se hereda de DependencyObject).
Método públicoSetCurrentValueEstablece el valor de una propiedad de dependencia sin cambiar el origen de su valor. (Se hereda de DependencyObject).
Método públicoMiembro estáticoSetCustomVisualStateManagerEstablece la propiedad adjunta CustomVisualStateManager.
Método públicoSetValue(DependencyProperty, Object)Establece el valor local de una propiedad de dependencia, especificado por su identificador de propiedad de dependencia. (Se hereda de DependencyObject).
Método públicoSetValue(DependencyPropertyKey, Object)Establece el valor local de una propiedad de dependencia de sólo lectura, especificado por el identificador DependencyPropertyKey de la propiedad de dependencia. (Se hereda de DependencyObject).
Método protegidoShouldSerializePropertyDevuelve un valor que indica si los procesos de serialización deben serializar el valor de la propiedad de dependencia proporcionada. (Se hereda de DependencyObject).
Método públicoToString Devuelve una cadena que representa al objeto actual. (Se hereda de Object).
Método públicoVerifyAccessExige que el subproceso de la llamada tenga acceso a DispatcherObject. (Se hereda de DispatcherObject).
Arriba

  NombreDescripción
Campo públicoMiembro estáticoCustomVisualStateManagerPropertyIdentifica la propiedad de dependencia CustomVisualStateManager.
Campo públicoMiembro estáticoVisualStateGroupsPropertyIdentifica la propiedad de dependencia VisualStateGroups.
Arriba

VisualStateManager le permite especificar los estados de un control, el aspecto de un control cuando está en un cierto estado, y cuándo un control cambia de estado. Por ejemplo, un Button podría tener un aspecto ligeramente diferente cuando se presiona que cuando no se presiona. Dos estados que define Button corresponden a cuando se presiona ("Pressed") y cuando no se presiona ("Normal"). El aspecto de un control cuando está en un estado se define mediante un VisualState. Un objeto VisualState contiene una colección de objetos Storyboard que especifican cómo cambia el aspecto del control cuando este está en ese estado. Agregue estados visuales a un control VisualStateManager.VisualStateGroups estableciendo la propiedad adjunta en el control. Cada VisualStateGroup contiene una colección de objetos VisualState que se excluyen mutuamente. Es decir, el control siempre está exactamente en un estado en cada VisualStateGroup.

VisualStateManager también le permite especificar cuándo un control entra en un estado concreto. El método que debería llamar para cambiar el estado depende de su escenario. Si crea un control que utiliza VisualStateManager en su ControlTemplate, llame al método GoToState. Para obtener más información sobre cómo crear controles que usan VisualStateManager, vea Crear un control que tiene una apariencia personalizable. Si utiliza VisualStateManager fuera de un VisualStateManager (por ejemplo, si utiliza un UserControl en un ControlTemplate o en un elemento único), llame al método GoToElementState. En cualquier caso, el VisualStateManager realiza la lógica necesaria para iniciar y detener apropiadamente los guiones gráficos asociados al estado relacionado. Por ejemplo, suponga que un control define los estados State1 y State2, cada uno de los cuales tiene un guión gráfico asociado. Si el control está en State1 y pasa State2 a GoToState o GoToElementState, VisualStateManager inicia el guión gráfico en State2 y detiene el guión gráfico en State1.

Los controles que se incluyen con Windows Presentation Foundation (WPF) utilizan VisualStateManager para cambiar los estados visuales. Al crear ControlTemplate para un control que se incluye con WPF, puede agregar los objetos VisualState al control ControlTemplate para especificar el aspecto del control en un estado determinado. Para encontrar los nombres de los estados visuales para los controles que se incluyen con WPF, vea Estilos y plantillas de Control. La lógica de control administra la transición entre estados, de modo que no es necesario hacer nada más que definir los objetos VisualState en el nuevo ControlTemplate. Para obtener más información sobre cómo crear plantillas de control para los controles existentes, vea Personalizar la apariencia de un control existente creando una clase ControlTemplate.

Si desea implementar su propia lógica para realizar la transición entre los estados, debe heredar de VisualStateManager, invalidar el método GoToStateCore y establecer la propiedad adjunta VisualStateManager.CustomVisualStateManager en el control que utiliza la lógica personalizada.

El siguiente ejemplo crea un Rectangle y agrega un VisualStateGroup, denominado CommonStates a la propiedad VisualStateManager.VisualStatesGroups adjunta. En el ejemplo se definen los objetos MouseOver y NormalVisualState en CommonStatesVisualStateGroup. Cuando el usuario mueve el puntero del mouse sobre Rectangle, cambia de rojo a verde durante medio segundo. Cuando el usuario mueve el mouse fuera del rectángulo, Grid vuelve a cambiar inmediatamente a rojo. Observe que el estado Normal no define un Storyboard. Un objeto Storyboard no es necesario porque cuando el objeto Rectangle cambia del estado MouseOver al estado Normal, el objeto Storyboard de MouseOver se detiene y la propiedad Color de SolidColorBrush vuelve al color rojo.


<Rectangle Name="rect" 
           Width="100" Height="100"
           MouseEnter="rect_MouseEvent" 
           MouseLeave="rect_MouseEvent">
  <VisualStateManager.VisualStateGroups>
    <VisualStateGroup Name="MouseStates">
      <VisualState Name="MouseEnter">
        <Storyboard>
          <ColorAnimation To="Green" 
                          Storyboard.TargetName="rectBrush" 
                          Storyboard.TargetProperty="Color"/>
        </Storyboard>
      </VisualState>
      <VisualState Name="MouseLeave" />
      <VisualStateGroup.Transitions>
        <VisualTransition To="MouseLeave" GeneratedDuration="00:00:00"/>

        <VisualTransition To="MouseEnter" GeneratedDuration="00:00:00.5">
          <VisualTransition.GeneratedEasingFunction>
            <ExponentialEase EasingMode="EaseOut" Exponent="10"/>
          </VisualTransition.GeneratedEasingFunction>
        </VisualTransition>

      </VisualStateGroup.Transitions>
    </VisualStateGroup>
  </VisualStateManager.VisualStateGroups>

  <Rectangle.Fill>
    <SolidColorBrush x:Name="rectBrush" Color="Red"/>
  </Rectangle.Fill>
</Rectangle>


En el siguiente ejemplo se muestra el controlador de eventos que se define en el ejemplo anterior y llama al método GoToElementState para cambiar de estado. Si el rectángulo del ejemplo anterior formara parte de un ControlTemplate, el ejemplo tendría que llamar al método GoToState.


private void rect_MouseEvent(object sender, MouseEventArgs e)
{
    if (rect.IsMouseOver)
    {
        VisualStateManager.GoToElementState(rect, "MouseEnter", true);
    }
    else
    {
        VisualStateManager.GoToElementState(rect, "MouseLeave", true);
    }
}


.NET Framework

Compatible con: 4

.NET Framework Client Profile

Compatible con: 4

Windows 7, Windows Vista SP1 o posterior, Windows XP SP3, Windows Server 2008 (no se admite Server Core), Windows Server 2008 R2 (se admite Server Core con SP1 o posterior), Windows Server 2003 SP2

.NET Framework no admite todas las versiones de todas las plataformas. Para obtener una lista de las versiones compatibles, vea Requisitos de sistema de .NET Framework.

Todos los miembros static (Shared en Visual Basic) públicos de este tipo son seguros para la ejecución de subprocesos. No se garantiza que los miembros de instancias sean seguros para la ejecución de subprocesos.
Mostrar: