Общие сведения о временных событиях

В этом разделе описывается, как использовать пять временных событий, доступных Timeline для Clock объектов и.

Предварительные условия

Для понимания этого раздела вы должны знать, как создавать и использовать анимации. Чтобы приступить к анимации, см. раздел Общие сведения об анимации.

Существует несколько способов анимации свойств в WPF .

Так как их можно использовать в разметке и коде, примеры в этом обзоре используют Storyboard объекты. Тем не менее описанные здесь идеи также применяются к другим методам анимирования свойств.

Что такое часы?

Временная шкала сама по себе просто описывает сегмент времени. Это объект временной шкалы Clock , выполняющий реальную работу: он поддерживает состояние времени выполнения для временной шкалы. В большинстве случаев, например при использовании раскадровок, часы для временной шкалы создаются автоматически. Можно также создать явно с Clock помощью CreateClock метода. Дополнительные сведения об Clock объектах см. в разделе Общие сведения о анимации и системе управления временем.

Зачем использовать события?

Все интерактивные временные операции являются асинхронными. Исключение составляет лишь поиск, который выравнивается по последнему такту. Точно определить, когда будут выполнены операции, невозможно. При наличии другого кода, который зависит от вашей операции, это может вызвать проблемы. Предположим, что вы хотите остановить временную шкалу, которая анимировала прямоугольник. После остановки временной шкалы вы изменяете цвет прямоугольника.

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

В предыдущем примере вторая строка кода может быть выполнена до того, как раскадровка будет остановлена. Это вызвано тем, что остановка является асинхронной операцией. При отправке команды на остановку временной шкалы или часов создается своего рода "запрос на остановку". Этот запрос обрабатывается только на следующем такте системы управления временем.

Для выполнения команд после завершения временной шкалы используйте временные события. В следующем примере для изменения цвета прямоугольника после окончания воспроизведения раскадровки используется обработчик событий.

// 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

Более полный пример см. в разделе Получение уведомлений при изменении состояния часов.

Открытые события

TimelineКлассы и Clock предоставляют пять временных событий. В следующей таблице перечислены эти события и условия, которые их вызывают.

Событие Интерактивная операция, вызывающая событие Другие условия
Завершено Переход к заполнению Часы останавливаются.
CurrentGlobalSpeedInvalidated Пауза, возобновление, поиск, установка соотношения скорости, переход к заполнению Часы запускаются в обратном направлении, ускоряются, запускаются в обычном направлении или останавливаются.
CurrentStateInvalidated Начало, переход к заполнению, остановка Часы запускаются, останавливаются, или выполняется заполнение.
CurrentTimeInvalidated Начало, поиск, переход к заполнению, остановка Часы работают.
RemoveRequested Удалить

Такты и объединение событий

При анимации объектов в WPF , это обработчик времени, управляющий анимациями. Система управления временем отслеживает ход времени и вычисляет состояние каждой анимации. Она выполняет эти действия несколько раз в секунду. Такие вычислительные проходы называются "тактами".

Хотя такты меняются часто, между ними может возникать множество событий. Например, временная шкала может быть остановлена, запущена и снова остановлена, в этом случае ее состояние будет изменено три раза. Теоретически событие может вызываться несколько раз в одном такте. Однако система управления временем объединяет события, чтобы каждое событие могло происходить не более одного раза за такт.

Регистрация в событиях

Существует два способа регистрации временных событий: их можно зарегистрировать на временной шкале и на часах, созданных на основе временной шкалы. Регистрация события непосредственно на часах достаточно проста, но ее можно выполнить только в коде. Зарегистрировать события на временной шкале можно как в коде, так и в разметке. В следующем разделе описано, как зарегистрировать события часов на временной шкале.

Регистрация событий часов на временной шкале

Несмотря на то, что события временной шкалы,,, Completed CurrentGlobalSpeedInvalidated CurrentStateInvalidated CurrentTimeInvalidated и RemoveRequested связаны с временной шкалой, регистрация для этих событий фактически связывает обработчик событий с Clock созданным для временной шкалой.

При регистрации Completed события на временной шкале, например, вы сообщаете системе о регистрации Completed событий каждого часов, созданных для временной шкалы. В коде необходимо зарегистрировать это событие перед Clock созданием для этой временной шкалы. в противном случае вы не получите уведомление. Это происходит автоматически в XAML ; синтаксический анализатор автоматически регистрирует событие перед Clock созданием.

См. также раздел