VisualStateGroup Classe
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
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
- 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:
- Gatilho personalizado que deriva de StateTriggerBase
- AdaptiveTrigger ativado devido a MinWindowWidth
- 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 |
DispatcherQueue |
Obtém o ao |
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. |