Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Este tópico descreve como o sistema de temporização usa as classes de animação, Timeline e Clock, para animar propriedades.
Pré-requisitos
Para entender este tópico, você deve ser capaz de usar animações do WPF para animar propriedades, conforme descrito na Visão Geral da Animação. Ele também ajuda a se familiarizar com as propriedades de dependência; para obter mais informações, consulte a Visão geral das propriedades de dependência.
Cronogramas e relógios
A Visão geral da animação descreveu como um Timeline representa um segmento de tempo e como a animação é um tipo de Timeline que gera valores de saída. Por si só, um Timeline. não faz nada além de apenas descrever um segmento de tempo. É o objeto da linha temporal do Clock que faz o trabalho real. Da mesma forma, a animação não anima as propriedades: uma classe de animação descreve como os valores de saída devem ser calculados, mas é o Clock criado para a animação que controla a saída da animação e a aplica às propriedades.
Um Clock é um tipo especial de objeto que mantém o estado de execução relacionado ao tempo para o Timeline. Ele fornece três bits de informações que são essenciais para o sistema de animação e tempo: CurrentTime, CurrentProgresse CurrentState. A Clock determina seu tempo, progresso e estado atuais usando os comportamentos de tempo descritos por seu Timeline: Duration, , RepeatBehaviore AutoReverseassim por diante.
Na maioria dos casos, um Clock é criado automaticamente para sua linha do tempo. Quando você anima usando um Storyboard ou o método BeginAnimation, os clocks são criados automaticamente para suas linhas do tempo e animações e aplicados às suas propriedades de destino. Você também pode criar um Clock explicitamente usando o método CreateClock do seu Timeline. O MediaTimeline.CreateClock método cria um relógio do tipo apropriado para o Timeline para o qual ele é chamado. Caso Timeline contenha sub-linhas do tempo, ele também criará objetos Clock para elas. Os objetos resultantes Clock são organizados em árvores que correspondem à estrutura da árvore de Timeline objetos da qual são criados.
Há diferentes tipos de relógios para diferentes tipos de linhas do tempo. A tabela a seguir mostra os Clock tipos que correspondem a alguns dos diferentes Timeline tipos.
| Tipo de linha do tempo | Tipo de relógio | Finalidade do relógio |
|---|---|---|
| Animação (herda de AnimationTimeline) | AnimationClock | Gera valores de saída para uma propriedade de dependência. |
| MediaTimeline | MediaClock | Processa um arquivo de mídia. |
| ParallelTimeline | ClockGroup | Agrupa e controla seus objetos filhos Clock |
| Storyboard | ClockGroup | Agrupa e controla seus objetos filhos Clock |
Você pode aplicar todos AnimationClock os objetos criados para propriedades de dependência compatíveis usando o ApplyAnimationClock método.
Em cenários com uso intensivo de desempenho, como animar um grande número de objetos semelhantes, gerenciar seu próprio Clock uso pode fornecer benefícios de desempenho.
Relógios e o Gerenciador de Horários
Quando você anima objetos no WPF, é o gerenciador de tempo que gerencia os Clock objetos criados para suas linhas do tempo. O gerenciador de tempo é a raiz de uma árvore de Clock objetos e controla o fluxo de tempo nessa árvore. Um gerenciador de horários é criado automaticamente para cada aplicativo WPF e é invisível para o desenvolvedor de aplicativos. O gerenciador de tempo "tique" muitas vezes por segundo; o número real de tiques que ocorrem a cada segundo varia dependendo dos recursos disponíveis do sistema. Durante cada um desses ciclos, o gerenciador de tempo calcula o estado de todos os ActiveClock objetos na árvore de temporização.
A ilustração a seguir mostra a relação entre o gerenciador de tempo, e AnimationClock, e uma propriedade de dependência animada.
Animando uma propriedade
Quando o gerenciador de tempo marca, ele atualiza o horário de cada ActiveClock no aplicativo. Se o Clock for um AnimationClock, ele usará o método GetCurrentValue do AnimationTimeline a partir do qual foi criado para calcular seu valor de saída atual. O AnimationClock fornece a AnimationTimeline hora local atual, um valor de entrada, que normalmente é o valor base da propriedade e um valor de destino padrão. Ao recuperar o valor de uma propriedade animada usando o GetValue método ou seu acessador CLR, você obtém a saída de sua AnimationClock.
Grupos de Relógios
A seção anterior descreveu como há diferentes tipos de Clock objetos para diferentes tipos de linhas do tempo. A ilustração a seguir mostra a relação entre o gerenciador de tempo, um ClockGroup, um AnimationClocke uma propriedade de dependência animada. Um ClockGroup é criado para linhas do tempo que agrupam outras linhas do tempo, como a Storyboard classe, que agrupa animações e outras linhas do tempo.
Um Grupo de Relógios
Composição
É possível associar vários relógios a uma única propriedade, nesse caso, cada relógio usa o valor de saída do relógio anterior como seu valor base. A ilustração a seguir mostra três AnimationClock objetos aplicados à mesma propriedade. Clock1 utiliza o valor base da propriedade animada como entrada e o utiliza para gerar a saída. Clock2 usa a saída do Clock1 como entrada e a usa para gerar saída. O Clock3 usa a saída do Clock2 como entrada e a usa para gerar saída. Quando vários relógios afetam a mesma propriedade simultaneamente, considera-se que eles estão em uma cadeia de composição.
Uma cadeia de composição
Observe que, embora uma relação seja criada entre a entrada e a saída AnimationClock dos objetos na cadeia de composição, os seus comportamentos temporais não são afetados; Clock objetos (incluindo AnimationClock objetos) têm uma dependência hierárquica em relação aos seus objetos pai Clock.
Para aplicar vários relógios à mesma propriedade, use o ComposeHandoffBehavior ao aplicar um Storyboard, uma animação, ou AnimationClock.
Tiques e consolidação de eventos
Além de calcular valores de saída, o gerenciador de tempo faz outro trabalho a cada tique: determina o estado de cada relógio e dispara eventos conforme apropriado.
Embora os tiques ocorram com frequência, é possível que muitas coisas aconteçam entre tiques. Por exemplo, um Clock pode ser interrompido, iniciado e interrompido novamente, nesse caso, seu CurrentState valor terá sido alterado três vezes. Em teoria, o evento CurrentStateInvalidated pode ser gerado várias vezes em um único tique; no entanto, o motor de temporização consolida os eventos, de forma que o evento CurrentStateInvalidated possa ser gerado no máximo uma vez por tique. Isso é verdadeiro para todos os eventos de tempo: no máximo um evento de cada tipo é gerado para um determinado Clock objeto.
Quando um Clock alterna estados e retorna ao seu estado original entre ciclos (como mudar de Active para Stopped e voltar para Active), o evento associado ainda ocorre.
Para obter mais informações sobre eventos de tempo, consulte a Visão geral de eventos de tempo.
Valores atuais e valores base de propriedades
Uma propriedade animatável pode ter dois valores: um valor base e um valor atual. Ao definir a propriedade usando seu acessador CLR ou o SetValue método, você define seu valor base. Quando uma propriedade não é animada, seus valores base e atual são os mesmos.
Quando você anima uma propriedade, define o AnimationClock valor atual da propriedade. Recuperar o valor da propriedade por meio de seu acessador CLR ou o método GetValue retorna a saída de AnimationClock quando o AnimationClock é Active ou Filling. Você pode recuperar o valor base da propriedade usando o GetAnimationBaseValue método.
Consulte também
- Visão geral da animação
- Visão geral de eventos de tempo
- Visão geral dos comportamentos de tempo
.NET Desktop feedback