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 a Grid alteração 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 um 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 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 o tempo todo. Sempre que houver um caso em que um controle se destine a ser 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 comportamento storyboard temporário em um de seus elementos do VisualState , verifique se esse 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, de modo 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 , também VisualStateGroup é possível definir um conjunto de elementos VisualTransition , em que cada VisualTransition um pertence a pelo menos um dos elementos nomeados VisualState definidos no grupo. No 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 o 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 existem VisualStateGroup 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 seu modelo, não um gatilho para outra lógica.

Construtores

Nome Description
VisualStateGroup()

Inicializa uma nova instância da classe VisualStateGroup .

Propriedades

Nome Description
CurrentState

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

Dispatcher

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

(Herdado de DependencyObject)
DispatcherQueue

Obtém o DispatcherQueue que este objeto está associado. Representa DispatcherQueue uma instalação que pode acessar o DependencyObject thread da interface do usuário mesmo se o código for 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

Nome Description
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 em 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 um DependencyProperty específico 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

Nome Description
CurrentStateChanged

Ocorre após uma alteração de controle em um estado diferente.

CurrentStateChanging

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

Aplica-se a

Confira também