Compartilhar via


VisualStateManager Classe

Definição

Gerencia estados e a lógica de transição entre estados para controles.

public ref class VisualStateManager : System::Windows::DependencyObject
public class VisualStateManager : System.Windows.DependencyObject
type VisualStateManager = class
    inherit DependencyObject
Public Class VisualStateManager
Inherits DependencyObject
Herança

Exemplos

O exemplo a seguir cria um Rectangle e adiciona um VisualStateGroup chamado CommonStates à propriedade anexada VisualStateManager.VisualStatesGroups. O exemplo define os objetos MouseOver e NormalVisualState no CommonStatesVisualStateGroup. Quando o usuário move o ponteiro do mouse sobre o Rectangle, ele muda de vermelho para verde em mais de meio segundo. Quando o usuário move o mouse para longe do retângulo, o Grid muda imediatamente para vermelho. Observe que o estado Normal não define um Storyboard. Um Storyboard não é necessário porque quando o Rectangle faz a transição do estado MouseOver para o estado Normal, o Storyboard para MouseOver é interrompido e a propriedade Color para o SolidColorBrush retorna para vermelho.

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

O exemplo a seguir mostra o manipulador de eventos definido no exemplo anterior e chama o método GoToElementState para fazer a transição entre estados. Se o retângulo no exemplo anterior fosse parte de um ControlTemplate, o exemplo teria que chamar o 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

Comentários

O VisualStateManager permite que você especifique estados para um controle, a aparência de um controle quando ele está em um determinado estado e quando um controle muda de estado. Por exemplo, um Button pode ter uma aparência ligeiramente diferente quando é pressionado do que quando não é pressionado. Dois estados que o Button define correspondem a quando é pressionado ("Pressed") e quando não é ("Normal"). A aparência de um controle quando ele está em um estado é definido por um VisualState. Um VisualState contém uma coleção de objetos Storyboard que especificam como a aparência do controle muda quando o controle está nesse estado. Adicione estados visuais a um controle definindo a propriedade anexada VisualStateManager.VisualStateGroups no controle. Cada VisualStateGroup contém uma coleção de objetos VisualState mutuamente exclusivos. Ou seja, o controle está sempre em exatamente um estado de cada VisualStateGroup.

O VisualStateManager também permite que você especifique quando um controle entra em um estado específico. O método que você deve chamar para alterar estados depende do seu cenário. Se você criar um controle que usa o VisualStateManager em seu ControlTemplate, chame o método GoToState. Para obter mais informações sobre como criar controles que usam o VisualStateManager, consulte Criando um controle que tenha uma aparência personalizável. Se você usar a VisualStateManager fora de uma ControlTemplate (por exemplo, se usar um VisualStateManager em um UserControl ou em um único elemento), chame o método GoToElementState. Em ambos os casos, o VisualStateManager executa a lógica necessária para iniciar e parar adequadamente os storyboards associados ao estado envolvido. Por exemplo, suponha que um controle defina os estados, State1 e State2, cada um deles com um storyboard associado a ele. Se o controle estiver em State1 e você passar State2 para GoToState ou GoToElementState, o VisualStateManager iniciará o storyboard em State2 e interromperá o storyboard em State1.

Os controles incluídos no Windows Presentation Foundation (WPF) usam o VisualStateManager para alterar os estados visuais. Ao criar um ControlTemplate para um controle incluído no WPF, você pode adicionar objetos VisualState ao ControlTemplate do controle para especificar a aparência do controle em um determinado estado. Para localizar os nomes dos estados visuais para os controles incluídos no WPF, consulte estilos de controle e modelos. A lógica do controle manipula a transição entre estados, portanto, você não precisa fazer nada além de definir os objetos VisualState no novo ControlTemplate. Para obter mais informações sobre como criar modelos de controle para controles existentes, consulte Personalizando a aparência de um controle existente criando umControlTemplate.

Se quiser implementar sua própria lógica para a transição entre estados, você deverá herdar de VisualStateManager, substituir o método GoToStateCore e definir a propriedade anexada VisualStateManager.CustomVisualStateManager no controle que usa a lógica personalizada.

Construtores

VisualStateManager()

Inicializa uma nova instância da classe VisualStateManager.

Campos

CustomVisualStateManagerProperty

Identifica a propriedade de dependência CustomVisualStateManager.

VisualStateGroupsProperty

Identifica a propriedade de dependência VisualStateGroups.

Propriedades

DependencyObjectType

Obtém o DependencyObjectType que encapsula o tipo CLR dessa instância.

(Herdado de DependencyObject)
Dispatcher

Obtém o Dispatcher ao qual esse DispatcherObject está associado.

(Herdado de DispatcherObject)
IsSealed

Obtém um valor que indica se essa instância está lacrada no momento (somente leitura).

(Herdado de DependencyObject)

Propriedades Anexadas

CustomVisualStateManager

Obtém ou define o objeto VisualStateManager que faz a transição entre os estados de um controle.

VisualStateGroups

Obtém ou define uma coleção de objetos VisualStateGroup.

Métodos

CheckAccess()

Determina se o thread de chamada tem acesso a esse DispatcherObject.

(Herdado de DispatcherObject)
ClearValue(DependencyProperty)

Limpa o valor local de uma propriedade. A propriedade a ser desmarcada é especificada por um identificador de DependencyProperty.

(Herdado de DependencyObject)
ClearValue(DependencyPropertyKey)

Limpa o valor local de uma propriedade somente leitura. A propriedade a ser desmarcada é especificada por um DependencyPropertyKey.

(Herdado de DependencyObject)
CoerceValue(DependencyProperty)

Coagi o valor da propriedade de dependência especificada. Isso é feito invocando qualquer função de CoerceValueCallback especificada em metadados de propriedade para a propriedade de dependência como ela existe na chamada DependencyObject.

(Herdado de DependencyObject)
Equals(Object)

Determina se um DependencyObject fornecido é equivalente ao DependencyObjectatual.

(Herdado de DependencyObject)
GetCustomVisualStateManager(FrameworkElement)

Obtém a propriedade anexada CustomVisualStateManager.

GetHashCode()

Obtém um código hash para este DependencyObject.

(Herdado de DependencyObject)
GetLocalValueEnumerator()

Cria um enumerador especializado para determinar quais propriedades de dependência têm valores definidos localmente neste DependencyObject.

(Herdado de DependencyObject)
GetType()

Obtém o Type da instância atual.

(Herdado de Object)
GetValue(DependencyProperty)

Retorna o valor efetivo atual de uma propriedade de dependência nesta instância de um DependencyObject.

(Herdado de DependencyObject)
GetVisualStateGroups(FrameworkElement)

Obtém a propriedade anexada VisualStateGroups.

GoToElementState(FrameworkElement, String, Boolean)

Faz a transição do elemento entre dois estados. Use esse método para fazer a transição de estados definidos por um aplicativo, em vez de definidos por um controle.

GoToState(FrameworkElement, String, Boolean)

Faz a transição do controle entre dois estados. Use esse método para fazer a transição de estados no controle que tem um ControlTemplate.

GoToStateCore(FrameworkElement, FrameworkElement, String, VisualStateGroup, VisualState, Boolean)

Faz a transição de um controle entre estados.

InvalidateProperty(DependencyProperty)

Reavalia o valor efetivo da propriedade de dependência especificada.

(Herdado de DependencyObject)
MemberwiseClone()

Cria uma cópia superficial do Objectatual.

(Herdado de Object)
OnPropertyChanged(DependencyPropertyChangedEventArgs)

Invocado sempre que o valor efetivo de qualquer propriedade de dependência neste DependencyObject for atualizado. A propriedade de dependência específica que foi alterada é relatada nos dados do evento.

(Herdado de DependencyObject)
RaiseCurrentStateChanged(VisualStateGroup, VisualState, VisualState, FrameworkElement, FrameworkElement)

Gera o evento CurrentStateChanging no objeto VisualStateGroup especificado.

RaiseCurrentStateChanging(VisualStateGroup, VisualState, VisualState, FrameworkElement, FrameworkElement)

Gera o evento CurrentStateChanging no objeto VisualStateGroup especificado.

ReadLocalValue(DependencyProperty)

Retorna o valor local de uma propriedade de dependência, se ela existir.

(Herdado de DependencyObject)
SetCurrentValue(DependencyProperty, Object)

Define o valor de uma propriedade de dependência sem alterar sua fonte de valor.

(Herdado de DependencyObject)
SetCustomVisualStateManager(FrameworkElement, VisualStateManager)

Define a propriedade anexada CustomVisualStateManager.

SetValue(DependencyProperty, Object)

Define o valor local de uma propriedade de dependência, especificada por seu identificador de propriedade de dependência.

(Herdado de DependencyObject)
SetValue(DependencyPropertyKey, Object)

Define o valor local de uma propriedade de dependência somente leitura, especificada pelo identificador DependencyPropertyKey da propriedade de dependência.

(Herdado de DependencyObject)
ShouldSerializeProperty(DependencyProperty)

Retorna um valor que indica se os processos de serialização devem serializar o valor da propriedade de dependência fornecida.

(Herdado de DependencyObject)
ToString()

Retorna uma cadeia de caracteres que representa o objeto atual.

(Herdado de Object)
VerifyAccess()

Impõe que o thread de chamada tenha acesso a esse DispatcherObject.

(Herdado de DispatcherObject)

Aplica-se a