Visão geral Eventos de Temporizadores
Este tópico descreve como usar os cinco eventos de tempo disponíveis nos objetos Timeline e Clock.
Pré-requisitos
Para entender esse tópico, você deve compreender como criar e usar animações. Para se familiarizar com animação, consulte o Revisão de Animação.
Há várias maneiras de animar propriedades no WPF:
Usando objetos storyboard (marcação e código): Você pode usar Storyboard objetos a organizar e distribuir animações a um ou mais objetos. Para um exemplo, consulte Como: Animate a Property by Using a Storyboard.
Usando animações locais (código somente): Você pode aplicar AnimationTimeline objetos diretamente a eles animar propriedades. Para um exemplo, consulte Como: Animar uma Propriedade Sem Usar um Storyboard.
Usando relógios (código somente): Explicitamente você pode gerenciar a criação de relógio e distribuir os relógios de animação por conta própria. Para um exemplo, consulte Como: Animate a Property by Using an AnimationClock.
Porque você pode usá-los em código e marcação, os exemplos nesta visão geral usam objetos Storyboard. No entanto, os conceitos descritos podem ser aplicados aos outros métodos de animação de propriedades.
O que é um relógio?
Um cronograma, por si só, não faz realmente qualquer coisa diferente do que descrever um segmento de tempo. É Clock objeto que faz o trabalho real: Ele mantém o estado de time de execução relacionados a time para a linha do time. Na maioria dos casos, tais como quando usando storyboards, um relógio é criado automaticamente para o cronograma. Você também pode criar um Clock explicitamente usando o método CreateClock. Para obter mais informações sobre objetos Clock, consulte Visão Geral de Animação e Sistema de Tempo.
Por que usar eventos?
Com exceção de uma (busca alinhada a última escala), todos as operações de temporização interativas são assíncronas. Não é possível para que você saber exatamente quando eles serão executados. Isso pode ser um problema quando você tiver outro código que é dependente de sua operação de temporização. Suponha que se você quiser interromper um cronograma que anima um retângulo. Após o cronograma parar, você altera a cor do retângulo.
myStoryboard.Stop(myRectangle);
// This statement might execute
// before the storyboard has stopped.
myRectangle.Fill = Brushes.Blue;
No exemplo anterior, a segunda linha de código pode executar antes de o storyboard parar. Isso acontece porque interrupção é uma operação assíncrona. Informando a um cronograma ou relógio para parar cria uma solicitação de parada de classificações que não são processadas até a próxima escala do mecanismo de temporização.
Para executar comandos depois da conclusão de um cronograma, use eventos de temporização. No exemplo a seguir, um manipulador de eventos é usado para alterar a cor de um retângulo após o storyboard parar de tocar.
// Change the rectangle's color after the storyboard stops.
void myStoryboard_CurrentStateInvalidated(object sender, EventArgs e)
{
Clock myStoryboardClock = (Clock)sender;
if (myStoryboardClock.CurrentState == ClockState.Stopped)
{
myRectangle.Fill = Brushes.Blue;
}
}
...
// Register for the CurrentStateInvalidated timing event.
myStoryboard.CurrentStateInvalidated += new EventHandler(myStoryboard_CurrentStateInvalidated);
Para um exemplo completo, consulte Como: Receive Notification When a Clock's State Changes.
Eventos públicos
As classes Timeline e Clock fornecem cinco eventos de tempo. A tabela a seguir lista esses eventos e as condições que os disparam.
Evento |
Disparando Operação Interativa |
Outros disparadores |
---|---|---|
Completed |
Ignorar para preencher |
O relógio completa. |
CurrentGlobalSpeedInvalidated |
Pausar e reiniciar, procurar, definir taxa de velocidade, pular para preencher, parar |
O relógio reverte, acelera, inicia ou para. |
CurrentStateInvalidated |
Começar, pular para preencher, interromper |
O relógio inicia, para, ou preenche. |
CurrentTimeInvalidated |
Começar, procurar, pular para preencher, interromper |
O relógio progride. |
RemoveRequested |
Remove |
Marcas e Consolidação de eventos
Quando você anima objetos de WPF, é o mecanismo de temporização que gerencia as suas animações. O mecanismo de temporização controla o andamento de tempo e calcula o estado de cada animação. Faz muitas de tais passes de avaliação em um segundo. Esses passos de avaliação são conhecidos como "escalas" ("ticks").
Enquanto escalas ocorrerem com frequência, é possível que muita coisas ocorram entre escalas. Por exemplo, um cronograma pode ser interrompido, iniciado e interrompido novamente, nesse caso, seu estado atual terá sido alterado três vezes. Em teoria, o evento pode ser gerado várias vezes em uma única escala; no entanto, o mecanismo de temporização consolida eventos, de modo que cada evento pode ser gerado no máximo uma vez por escala.
Registrando para eventos
Há duas maneiras de se registrar para eventos de tempo: Você pode registrar-se com a linha do tempo ou com o relógio criado a partir da linha do tempo. Registrando um evento diretamente com um relógio é relativamente simples, embora ele só pode ser feito a partir do código. Você pode registrar eventos com uma linha de tempo a partir de marcação ou código. A próxima seção descreve como registrar eventos de relógio com uma linha do tempo.
Registrando eventos do relógio com uma linha do tempo
Embora eventos Completed,CurrentGlobalSpeedInvalidated, CurrentStateInvalidated,CurrentTimeInvalidated,e RemoveRequested de um cronograma aparecem para ser associado com o cronograma, registrando esses eventos realmente associa um manipulador de evento com o Clock criado para o cronograma.
Quando você registra o evento Completed em uma linha do tempo, por exemplo, você está realmente dizendo ao sistema para registrar o evento Completed de cada relógio que é criado para o cronograma. No código, você deve registrar este evento antes de que Clock seja criado para esta linha do tempo; caso contrário, você não receberá notificação. Isso acontece automaticamente no XAML;o analisador registra automaticamente o evento antes de Clock ser criado.
Consulte também
Conceitos
Visão Geral de Animação e Sistema de Tempo
Visão geral sobre comportamentos de temporização