VisualStateManager Clase
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Administra los estados y la lógica para realizar la transición entre estados para los controles.
public ref class VisualStateManager : System::Windows::DependencyObject
public class VisualStateManager : System.Windows.DependencyObject
type VisualStateManager = class
inherit DependencyObject
Public Class VisualStateManager
Inherits DependencyObject
- Herencia
Ejemplos
En el ejemplo siguiente se crea un Rectangle y se agrega un VisualStateGroup denominado CommonStates
a la propiedad adjunta VisualStateManager.VisualStatesGroups
. En el ejemplo se definen los objetos MouseOver
y Normal
VisualState del CommonStates
VisualStateGroup. Cuando el usuario mueve el puntero del mouse sobre la Rectangle, cambia de rojo a verde a medio segundo. Cuando el usuario mueve el mouse fuera del rectángulo, el Grid cambia inmediatamente a rojo. Tenga en cuenta que el estado Normal
no define un Storyboard. No se requiere un Storyboard porque cuando el Rectangle pasa del estado MouseOver
al estado de Normal
, el Storyboard para MouseOver
se detiene y la propiedad Color del SolidColorBrush vuelve a 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 ejemplo siguiente se muestra el controlador de eventos que se define en el ejemplo anterior y llama al método GoToElementState para realizar la transición entre estados. Si el rectángulo del ejemplo anterior formaba 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);
}
}
Private Sub rect_MouseEvent(ByVal sender As Object, ByVal e As MouseEventArgs)
If rect.IsMouseOver Then
VisualStateManager.GoToElementState(rect, "MouseEnter", True)
Else
VisualStateManager.GoToElementState(rect, "MouseLeave", True)
End If
End Sub
Comentarios
El VisualStateManager permite especificar estados para un control, la apariencia de un control cuando se encuentra en un estado determinado y cuando un control cambia de estado. Por ejemplo, un Button puede tener una apariencia ligeramente diferente cuando se presiona que cuando no se presiona. Dos estados a los que define el Button corresponden cuando se presiona ("Pressed"
) y cuando no es ("Normal"
). La apariencia de un control cuando está en un estado se define mediante un VisualState. Un VisualState contiene una colección de objetos Storyboard que especifican cómo cambia la apariencia del control cuando el control está en ese estado. Para agregar estados visuales a un control, establezca la propiedad adjunta VisualStateManager.VisualStateGroups
en el control . Cada VisualStateGroup contiene una colección de objetos VisualState que son mutuamente excluyentes. Es decir, el control siempre está en un estado exacto de en cada VisualStateGroup.
El VisualStateManager también permite especificar cuándo un control entra en un estado específico. El método al que debe llamar a los estados de cambio depende del escenario. Si crea un control que usa el VisualStateManager en su ControlTemplate, llame al método GoToState. Para obtener más información sobre cómo crear controles que usan el VisualStateManager, vea Crear un control que tenga una apariencia personalizable. Si usa el VisualStateManager fuera de un ControlTemplate (por ejemplo, si usa un VisualStateManager en un UserControl o en un solo elemento), llame al método GoToElementState. En cualquier caso, el VisualStateManager realiza la lógica necesaria para iniciar y detener adecuadamente los guiones gráficos asociados al estado implicado. Por ejemplo, supongamos que un control define los estados, State1
y State2
, cada uno de los cuales tiene asociado un guión gráfico. Si el control está en State1
y pasa State2
a GoToState o GoToElementState, el 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) usan el VisualStateManager para cambiar los estados visuales. Al crear un ControlTemplate para un control que se incluye con WPF, puede agregar VisualState objetos al ControlTemplate del control para especificar la apariencia del control en un estado determinado. Para buscar los nombres de los estados visuales de los controles que se incluyen con WPF, vea Estilos de control y plantillas. La lógica del control controla la transición entre estados, por lo 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 controles existentes, vea Personalizar la apariencia de un control existente mediante la creación de un controlTemplate.
Si desea implementar su propia lógica para realizar la transición entre estados, debe heredar de VisualStateManager, invalidar el método GoToStateCore y establecer la propiedad adjunta VisualStateManager.CustomVisualStateManager en el control que usa la lógica personalizada.
Constructores
VisualStateManager() |
Inicializa una nueva instancia de la clase VisualStateManager. |
Campos
CustomVisualStateManagerProperty |
Identifica la propiedad de dependencia CustomVisualStateManager. |
VisualStateGroupsProperty |
Identifica la propiedad de dependencia VisualStateGroups. |
Propiedades
DependencyObjectType |
Obtiene el DependencyObjectType que encapsula el tipo CLR de esta instancia. (Heredado de DependencyObject) |
Dispatcher |
Obtiene el Dispatcher al que está asociado este DispatcherObject. (Heredado de DispatcherObject) |
IsSealed |
Obtiene un valor que indica si esta instancia está actualmente sellada (solo lectura). (Heredado de DependencyObject) |
Propiedades adjuntas
CustomVisualStateManager |
Obtiene o establece el objeto VisualStateManager que realiza la transición entre los estados de un control. |
VisualStateGroups |
Obtiene o establece una colección de objetos VisualStateGroup. |
Métodos
CheckAccess() |
Determina si el subproceso que llama tiene acceso a este DispatcherObject. (Heredado de DispatcherObject) |
ClearValue(DependencyProperty) |
Borra el valor local de una propiedad. El identificador de DependencyProperty especifica la propiedad que se va a borrar. (Heredado de DependencyObject) |
ClearValue(DependencyPropertyKey) |
Borra el valor local de una propiedad de solo lectura. Un DependencyPropertyKeyespecifica la propiedad que se va a borrar. (Heredado de DependencyObject) |
CoerceValue(DependencyProperty) |
Coerce el valor de la propiedad de dependencia especificada. Esto se logra invocando cualquier función de CoerceValueCallback especificada en metadatos de propiedad para la propiedad de dependencia tal como existe en la llamada a DependencyObject. (Heredado de DependencyObject) |
Equals(Object) |
Determina si un DependencyObject proporcionado es equivalente al DependencyObjectactual. (Heredado de DependencyObject) |
GetCustomVisualStateManager(FrameworkElement) |
Obtiene la propiedad adjunta CustomVisualStateManager. |
GetHashCode() |
Obtiene un código hash para este DependencyObject. (Heredado de DependencyObject) |
GetLocalValueEnumerator() |
Crea un enumerador especializado para determinar qué propiedades de dependencia tienen valores establecidos localmente en este DependencyObject. (Heredado de DependencyObject) |
GetType() |
Obtiene el Type de la instancia actual. (Heredado de Object) |
GetValue(DependencyProperty) |
Devuelve el valor efectivo actual de una propiedad de dependencia en esta instancia de un DependencyObject. (Heredado de DependencyObject) |
GetVisualStateGroups(FrameworkElement) |
Obtiene la propiedad adjunta VisualStateGroups. |
GoToElementState(FrameworkElement, String, Boolean) |
Realiza la transición del elemento entre dos estados. Use este método para realizar la transición de los estados definidos por una aplicación, en lugar de definirlo mediante un control. |
GoToState(FrameworkElement, String, Boolean) |
Realiza la transición del control entre dos estados. Use este método para realizar la transición de los estados en el control que tiene un ControlTemplate. |
GoToStateCore(FrameworkElement, FrameworkElement, String, VisualStateGroup, VisualState, Boolean) |
Realiza una transición de un control entre estados. |
InvalidateProperty(DependencyProperty) |
Vuelve a evaluar el valor efectivo de la propiedad de dependencia especificada. (Heredado de DependencyObject) |
MemberwiseClone() |
Crea una copia superficial del Objectactual. (Heredado de Object) |
OnPropertyChanged(DependencyPropertyChangedEventArgs) |
Se invoca cada vez que se ha actualizado el valor efectivo de cualquier propiedad de dependencia en este DependencyObject. La propiedad de dependencia específica que cambió se notifica en los datos del evento. (Heredado de DependencyObject) |
RaiseCurrentStateChanged(VisualStateGroup, VisualState, VisualState, FrameworkElement, FrameworkElement) |
Genera el evento CurrentStateChanging en el objeto VisualStateGroup especificado. |
RaiseCurrentStateChanging(VisualStateGroup, VisualState, VisualState, FrameworkElement, FrameworkElement) |
Genera el evento CurrentStateChanging en el objeto VisualStateGroup especificado. |
ReadLocalValue(DependencyProperty) |
Devuelve el valor local de una propiedad de dependencia, si existe. (Heredado de DependencyObject) |
SetCurrentValue(DependencyProperty, Object) |
Establece el valor de una propiedad de dependencia sin cambiar su origen de valor. (Heredado de DependencyObject) |
SetCustomVisualStateManager(FrameworkElement, VisualStateManager) |
Establece la propiedad adjunta CustomVisualStateManager. |
SetValue(DependencyProperty, Object) |
Establece el valor local de una propiedad de dependencia, especificado por su identificador de propiedad de dependencia. (Heredado de DependencyObject) |
SetValue(DependencyPropertyKey, Object) |
Establece el valor local de una propiedad de dependencia de solo lectura, especificada por el identificador DependencyPropertyKey de la propiedad de dependencia. (Heredado de DependencyObject) |
ShouldSerializeProperty(DependencyProperty) |
Devuelve un valor que indica si los procesos de serialización deben serializar el valor de la propiedad de dependencia proporcionada. (Heredado de DependencyObject) |
ToString() |
Devuelve una cadena que representa el objeto actual. (Heredado de Object) |
VerifyAccess() |
Exige que el subproceso de llamada tenga acceso a este DispatcherObject. (Heredado de DispatcherObject) |