Compartilhar via


Visão geral de eventos de temporização

Este tópico descreve como usar os cinco eventos de tempo disponíveis em objetos Timeline e Clock.

Pré-requisitos

Para entender este tópico, você deve entender como criar e usar animações. Para começar com animação, consulte Visão Geral da Animação.

Existem múltiplas maneiras de animar propriedades no WPF (Windows Presentation Foundation):

Você pode usar estes objetos Storyboard na marcação e no código, por isso os exemplos neste panorama utilizam os objetos Storyboard. No entanto, os conceitos descritos podem ser aplicados aos outros métodos de animação de propriedades.

O que é um relógio?

Uma linha do tempo, por si só, não faz nada além de descrever um segmento de tempo. É o objeto Clock da linha do tempo que faz o trabalho real: ele mantém o estado de tempo de execução relacionado ao tempo para a linha do tempo. Na maioria dos casos, como ao usar storyboards, um relógio é criado automaticamente para sua linha do tempo. Você também pode criar uma Clock explicitamente usando o método CreateClock. Para mais informações sobre objetos Clock, consulte a visão geral do Sistema de Animação e Tempo em .

Por que usar eventos?

Com exceção de uma (busca alinhada ao último tique), todas as operações interativas de tempo são assíncronas. Não há como você saber exatamente quando eles serão executados. Isso pode ser um problema quando você tem outro código que depende da sua operação de temporização. Suponha que você queria parar uma linha do tempo que animava um retângulo. Depois que a linha do tempo for interrompida, você alterará a cor do retângulo.

myStoryboard.Stop(myRectangle);

// This statement might execute
// before the storyboard has stopped.
myRectangle.Fill = Brushes.Blue;
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 ser executada antes que o storyboard pare. Isso porque parar é uma operação assíncrona. Dizer a uma linha do tempo ou relógio para parar cria uma espécie de "solicitação de parada" que não é processada até o próximo tique do motor de temporização.

Para executar comandos após a conclusão de uma linha do tempo, use eventos de cronometragem. No exemplo a seguir, um manipulador de eventos é usado para alterar a cor de um retângulo depois que o storyboard para de reproduzir.

// Register for the CurrentStateInvalidated timing event.
myStoryboard.CurrentStateInvalidated += new EventHandler(myStoryboard_CurrentStateInvalidated);
' Register for the CurrentStateInvalidated timing event.
AddHandler myStoryboard.CurrentStateInvalidated, AddressOf myStoryboard_CurrentStateInvalidated
// 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;
    }
}
' Change the rectangle's color after the storyboard stops. 
Private Sub myStoryboard_CurrentStateInvalidated(ByVal sender As Object, ByVal e As EventArgs)
    Dim myStoryboardClock As Clock = CType(sender, Clock)
    If myStoryboardClock.CurrentState = ClockState.Stopped Then
        myRectangle.Fill = Brushes.Blue
    End If
End Sub

Para obter um exemplo mais completo, consulte Receber Notificação quando o estado de um relógio for alterado.

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.

Acontecimento Disparando uma operação interativa Outros gatilhos
concluído Ignorar para preencher O relógio completa.
VelocidadeGlobalAtualInvalidada Pausar, retomar, buscar, definir taxa de velocidade, pular para preencher, parar O relógio inverte, acelera, inicia ou para.
EstadoAtualInvalidado Comece, pule para preencher, pare O relógio começa, para ou reinicia.
TempoAtualInvalidado Começar, buscar, pular para completar, parar O relógio progride.
RemoçãoSolicitada Retirar

Consolidação de Contagem e Eventos

Quando você anima objetos no WPF, é o mecanismo de tempo que gerencia suas animações. O mecanismo de tempo controla a progressão do tempo e calcula o estado de cada animação. Realiza muitas dessas avaliações em um segundo. Esses passes de avaliação são conhecidos como "tiques".

Embora os tiques ocorram com frequência, é possível que muitas coisas aconteçam entre os tiques. Por exemplo, uma linha do tempo pode ser interrompida, iniciada e interrompida novamente, caso em que seu estado atual terá sido alterado três vezes. Em teoria, o evento pode ser gerado várias vezes em um único tique; no entanto, o mecanismo de tempo consolida os eventos, de modo que cada evento possa ser gerado no máximo uma vez por tique.

Registrando-se para eventos

Existem duas maneiras de se registrar para eventos de temporização: você pode se registrar com a linha do tempo ou com o relógio criado a partir da linha do tempo. Registrar-se para um evento diretamente com um relógio é bastante simples, embora ele só possa ser feito a partir do código. Você pode se registrar para eventos com uma linha do tempo de marcação ou código. A próxima seção descreve como se inscrever em eventos temporais com uma linha do tempo.

Registrando-se para eventos de relógio com uma linha do tempo

Embora os eventos Completed, CurrentGlobalSpeedInvalidated, CurrentStateInvalidated, CurrentTimeInvalidatede RemoveRequested de uma linha do tempo pareçam estar associados à linha do tempo, o registro desses eventos associa um manipulador de eventos ao Clock criado para a linha do tempo.

Quando você se registra no evento Completed em um cronograma, por exemplo, você está realmente dizendo ao sistema para se registrar no evento Completed de cada relógio criado para o cronograma. No código, você deve se registrar para esse evento antes que o Clock seja criado para esta linha do tempo; caso contrário, você não receberá uma notificação. Isso ocorre automaticamente no XAML; o analisador se registra automaticamente para o evento antes da criação do Clock.

Consulte também

  • Visão geral do sistema de animação e sincronização
  • Visão geral da animação
  • Visão geral dos comportamentos de temporização