Compartilhar via


VisualStateGroup Classe

Definição

Contém objetos VisualState mutuamente exclusivos e objetos VisualTransition que são usados para ir de um estado para outro.

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>
Herança
Object Platform::Object IInspectable DependencyObject VisualStateGroup
Atributos

Exemplos

Este exemplo cria um ControlTemplate simples para um Botão que contém uma Grade. Ele também contém um VisualStateGroup chamado "CommonStates", que define os estados "PointerOver" e "Normal". O VisualStateGroup também tem um VisualTransition que especifica que leva meio segundo para que o Grid altere de verde para vermelho quando o usuário coloca o ponteiro sobre o 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>

Comentários

Cada VisualStateGroup declarado em XAML como parte de um modelo de controle deve sempre ter um atributo x:Name definido nele. Cada cadeia de caracteres de nome usada no conjunto de em um modelo de VisualStateGroups controle deve ser exclusiva nesse modelo. No entanto, é comum usar os mesmos nomes de grupo para controles diferentes. Por exemplo, quase todos os modelos de controle existentes têm um VisualStateGroup com x:Name attribute "CommonStates".

O conjunto de estados visuais dentro de cada VisualStateGroup um deve ser mutuamente exclusivo no grupo. Em outras palavras, o controle deve estar usando exatamente um dos estados visuais de cada um de seus grupos definidos VisualStateGroup em todos os momentos. Sempre que houver um caso em que um controle se destine a estar simultaneamente em dois estados, verifique se os dois estados estão em grupos diferentes. Por exemplo, é possível que um controle suspenso seja focado simultaneamente e tenha sua lista suspensa aberta. Em um design de estado visual correto, você teria um separado VisualStateGroup para cada estado para que ambos possam estar ativos ao mesmo tempo. Esses grupos podem ter nomes como "FocusStates" e "DropDownStates".

Sempre que você definir um VisualStateGroup que habilita um comportamento storyboard temporário em um de seus elementos VisualState , verifique se o grupo também contém um segundo VisualState que pode ser chamado para cancelar o estado anterior. Isso pode ser tão simples quanto declarar o segundo VisualState sem nenhum Storyboard , apenas um atributo x:Name.

O valor do atributo x:Name definido para um VisualStateGroup não é usado para uma chamada para VisualStateManager.GoToState; em vez disso, é o x:Name attribute de um VisualState que é usado para VisualStateManager.GoToState. Qualquer pessoa que use deve estar ciente de todos os grupos VisualStateManager.GoToState e estados disponíveis, para que cada chamada faça a transição correta de estados antigos para novos estados dentro de um grupo.

Além de um conjunto de elementos VisualState , um VisualStateGroup também pode definir um conjunto de elementos VisualTransition , em que cada VisualTransition um pertence a pelo menos um dos elementos nomeados VisualState definidos no grupo. Em XAML, o conjunto de VisualState elementos pode ser declarado como elemento filho do elemento de objeto imediato do VisualStateGroup. Isso é possível porque a propriedade States , que é a coleção de estados visuais, é a propriedade de conteúdo XAML para VisualStateGroup. Por outro lado, para definir a coleção de transições visuais, você deve declarar essa coleção dentro de um elemento de propriedade VisualStateGroup.Transitions em XAML. Para obter mais informações sobre propriedades de conteúdo XAML, consulte Guia de sintaxe XAML.

Ao usar StateTriggers para controlar estados visuais, o mecanismo de gatilho usa as seguintes regras de precedência para pontuar gatilhos e determinar qual gatilho e o VisualState correspondente estarão ativos:

  1. Gatilho personalizado que deriva de StateTriggerBase
  2. AdaptiveTrigger ativado devido a MinWindowWidth
  3. AdaptiveTrigger ativado devido a MinWindowHeight

Se houver vários gatilhos ativos por vez que tenham um conflito na pontuação (ou seja, dois gatilhos personalizados ativos), o primeiro declarado no arquivo de marcação terá precedência.

Observação: embora AdaptiveTrigger deriva de StateTriggerBase, ele só pode ser ativado por meio da configuração de MinWindowWidth e/ou MinWindowHeight.

Visualstategroup API que dá suporte à implementação personalizada do VisualStateManager

Muitos da API de VisualStateGroup existem apenas para dar suporte à implementação personalizada do VisualStateManager . Estes incluem: Name, CurrentState, CurrentStateChanging, CurrentStateChanged. Os usos mais comuns de estados visuais para modelos de controle não precisarão dessas API. Em particular, não é comum lidar com os eventos. A maioria das operações lógicas para um controle deve envolver suas próprias propriedades e eventos. Para a maioria dos cenários de definição de aplicativo e controle, as alterações de estado visual que ocorrem no controle devem ser apenas um resultado final da lógica que o controle aplica ao modelo, não um gatilho para outra lógica.

Construtores

VisualStateGroup()

Inicializa uma nova instância da classe VisualStateGroup .

Propriedades

CurrentState

Obtém o VisualState mais recentemente definido de uma chamada bem-sucedida para o método GoToState .

Dispatcher

Sempre retorna null em um aplicativo SDK do Aplicativo Windows. Em vez disso, use DispatcherQueue .

(Herdado de DependencyObject)
DispatcherQueue

Obtém o ao DispatcherQueue qual esse objeto está associado. O DispatcherQueue representa uma instalação que pode acessar o DependencyObject no thread da interface do usuário mesmo que o código seja iniciado por um thread que não seja da interface do usuário.

(Herdado de DependencyObject)
Name

Obtém o nome do VisualStateGroup.

States

Obtém a coleção de objetos VisualState mutuamente exclusivos.

Transitions

Obtém a coleção de objetos VisualTransition .

Métodos

ClearValue(DependencyProperty)

Limpa o valor local de uma propriedade de dependência.

(Herdado de DependencyObject)
GetAnimationBaseValue(DependencyProperty)

Retorna qualquer valor base estabelecido para uma propriedade de dependência, que se aplicaria nos casos em que uma animação não está ativa.

(Herdado de DependencyObject)
GetValue(DependencyProperty)

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

(Herdado de DependencyObject)
ReadLocalValue(DependencyProperty)

Retorna o valor local de uma propriedade de dependência, se um valor local for definido.

(Herdado de DependencyObject)
RegisterPropertyChangedCallback(DependencyProperty, DependencyPropertyChangedCallback)

Registra uma função de notificação para escutar alterações em uma DependencyProperty específica nesta instância dependencyObject .

(Herdado de DependencyObject)
SetValue(DependencyProperty, Object)

Define o valor local de uma propriedade de dependência em um DependencyObject.

(Herdado de DependencyObject)
UnregisterPropertyChangedCallback(DependencyProperty, Int64)

Cancela uma notificação de alteração que foi registrada anteriormente chamando RegisterPropertyChangedCallback.

(Herdado de DependencyObject)

Eventos

CurrentStateChanged

Ocorre depois que um controle é alterado para um estado diferente.

CurrentStateChanging

Ocorre quando um controle começa a mudar para um estado diferente.

Aplica-se a

Confira também