Übersicht über das Animations- und ZeitsteuerungssystemAnimation and Timing System Overview

In diesem Thema wird beschrieben, Timelinewie Clock das Timingsystem die Animationen, , und Klassen zum Animieren von Eigenschaften verwendet.This topic describes how the timing system uses the animation, Timeline, and Clock classes to animate properties.

VoraussetzungenPrerequisites

Um dieses Thema zu verstehen, sollten Sie WPFWPF-Animationen zum Animieren von Eigenschaften verwenden können, wie in Übersicht über Animationen beschrieben.To understand this topic, you should be able to use WPFWPF animations to animate properties, as described in the Animation Overview. Auch Kenntnisse über Abhängigkeitseigenschaften sind hilfreich. Weitere Informationen finden Sie unter Übersicht über Abhängigkeitseigenschaften.It also helps to be familiar with dependency properties; for more information, see the Dependency Properties Overview.

Zeitachsen und UhrenTimelines and Clocks

In der Animationsübersicht wurde beschrieben, wie ein Timeline Zeitsegment Timeline dargestellt wird, und eine Animation ist ein Typ, der Ausgabewerte erzeugt.The Animation Overview described how a Timeline represents a segment of time, and an animation is a type of Timeline that produces output values. An sich Timelinetut ein , nichts anderes, als nur ein Segment der Zeit zu beschreiben.By itself, a Timeline, doesn't do anything other than just describe a segment of time. Es ist das Clock Objekt der Zeitleiste, das die eigentliche Arbeit macht.It's the timeline's Clock object that does the real work. Ebenso wird die Animation nicht wirklich Eigenschaften animieren: Eine Animationsklasse beschreibt, Clock wie Ausgabewerte berechnet werden sollen, aber es ist die, die für die Animation erstellt wurde, die die Animationsausgabe steuert und sie auf Eigenschaften anwendet.Likewise, animation doesn't actually animate properties: an animation class describes how output values should be calculated, but it’s the Clock that was created for the animation that drives the animation output and applies it to properties.

A Clock ist ein spezieller Objekttyp, der den zeitbezogenen Laufzeitstatus für die Timelinebeibehält.A Clock is a special type of object that maintains timing-related run-time state for the Timeline. Es bietet drei Bits von Informationen, die für CurrentTime CurrentProgressdas CurrentStateAnimations- und Timing-System unerlässlich sind: , , und .It provides three bits of information that are essential to the animation and timing system: CurrentTime, CurrentProgress, and CurrentState. A Clock bestimmt die aktuelle Zeit, den Fortschritt und den TimelineStatus, indem die Timing-Verhalten verwendet werden, die durch : Duration, RepeatBehavior, AutoReverseusw. beschrieben werden.A Clock determines its current time, progress, and state by using the timing behaviors described by its Timeline: Duration, RepeatBehavior, AutoReverse, and so on.

In den meisten Clock Fällen wird automatisch eine für Ihre Zeitachse erstellt.In most cases, a Clock is created automatically for your timeline. Wenn Sie mit Storyboard einer BeginAnimation oder der Methode animieren, werden automatisch Uhren für Ihre Zeitachsen und Animationen erstellt und auf ihre Zieleigenschaften angewendet.When you animate by using a Storyboard or the BeginAnimation method, clocks are automatically created for your timelines and animations and applied to their targeted properties. Sie können auch Clock eine explizit CreateClock erstellen, Timelineindem Sie die Methode Ihrer verwenden.You can also create a Clock explicitly by using the CreateClock method of your Timeline. Die MediaTimeline.CreateClock Methode erstellt eine Uhr des Timeline entsprechenden Typs für den, auf dem sie aufgerufen wird.The MediaTimeline.CreateClock method creates a clock of the appropriate type for the Timeline on which it is called. Wenn Timeline die untergeordnete Zeitachsen Clock enthält, werden auch Objekte für sie erstellt.If the Timeline contains child timelines, it creates Clock objects for them as well. Die Clock resultierenden Objekte sind in Bäumen Timeline angeordnet, die der Struktur der Objektstruktur entsprechen, aus der sie erstellt werden.The resulting Clock objects are arranged in trees that match the structure of the Timeline objects tree from which they are created.

Es gibt verschiedene Typen von Uhren für verschiedene Typen von Zeitachsen.There are different types of clocks for different types of timelines. Die folgende Tabelle Clock zeigt die Typen, Timeline die einigen der verschiedenen Typen entsprechen.The following table shows the Clock types that correspond to some of the different Timeline types.

ZeitachsentypenTimeline type Typ der UhrClock type Zweck der UhrClock purpose
Animation (erbt AnimationTimelinevon )Animation (inherits from AnimationTimeline) AnimationClock Generiert Ausgabewerte für eine AbhängigkeitseigenschaftGenerates output values for a dependency property.
MediaTimeline MediaClock Verarbeitet eine MediendateiProcesses a media file.
ParallelTimeline ClockGroup Gruppiert und steuert Clock seine untergeordneten ObjekteGroups and controls its child Clock objects
Storyboard ClockGroup Gruppiert und steuert Clock seine untergeordneten ObjekteGroups and controls its child Clock objects

Sie können AnimationClock alle Objekte, die Sie erstellen, mithilfe der ApplyAnimationClock Methode auf kompatible Abhängigkeitseigenschaften anwenden.You can apply any AnimationClock objects you create to compatible dependency properties by using the ApplyAnimationClock method.

In rechenintensiven Szenarios, z. B. Animieren einer großen Anzahl ähnlicher Objekte verwalten Ihre eigenen Clock verwenden, kann Leistungsvorteile bieten.In performance-intensive scenarios, such as animating large numbers of similar objects, managing your own Clock use can provide performance benefits.

Uhren und der Zeit-ManagerClocks and the Time Manager

Wenn Sie Objekte WPFWPFin animieren, ist Clock es der Zeitmanager, der die für Ihre Zeitachsen erstellten Objekte verwaltet.When you animate objects in WPFWPF, it’s the time manager that manages the Clock objects created for your timelines. Der Zeit-Manager ist der Stamm einer Struktur von Clock Objekten und steuert den Zeitablauf in dieser Struktur.The time manager is the root of a tree of Clock objects and controls the flow of time in that tree. Ein Zeit-Manager wird automatisch für jede WPFWPF-Anwendung erstellt und ist für den Anwendungsentwickler nicht sichtbar.A time manager is automatically created for each WPFWPF application and is invisible to the application developer. Der Zeit-Manager „tickt“ mehrmals pro Sekunde. Die tatsächliche Anzahl von Ticks pro Sekunde variiert je nach den verfügbaren Systemressourcen.The time manager "ticks" many times per second; the actual number of ticks that occur each second varies depending on available system resources. Während jedes dieser Ticks berechnet der Zeitmanager den Active Clock Status aller Objekte in der Zeitstruktur.During each one of these ticks, the time manager computes the state of all Active Clock objects in the timing tree.

Die folgende Abbildung zeigt die Beziehung AnimationClockzwischen dem Zeitmanager und einer animierten Abhängigkeitseigenschaft.The following illustration shows the relationship between the time manager, and AnimationClock, and an animated dependency property.

ZeitsteuerungssystemkomponentenTiming system components
Animieren einer EigenschaftAnimating a property

Wenn der Zeitmanager tickt, aktualisiert Active Clock er die Uhrzeit jeder In-/Anwendung.When the time manager ticks, it updates the time of every Active Clock in the application. Wenn Clock es AnimationClocksich um GetCurrentValue ein handelt, verwendet er die Methode der, aus der AnimationTimeline er erstellt wurde, um den aktuellen Ausgabewert zu berechnen.If the Clock is an AnimationClock, it uses the GetCurrentValue method of the AnimationTimeline from which it was created to calculate its current output value. Der AnimationClock liefert AnimationTimeline die mit der aktuellen ortszeiten Zeit, einem Eingabewert, der in der Regel der Basiswert der Eigenschaft ist, und einem Standardzielwert.The AnimationClock supplies the AnimationTimeline with the current local time, an input value, which is typically the base value of the property, and a default destination value. Wenn Sie den Wert einer animierten GetValue Eigenschaft mithilfe der Methode oder ihres AnimationClockCLR-Accessors abrufen, erhalten Sie die Ausgabe der .When you retrieve the value of an animated by property using the GetValue method or its CLR accessor, you get the output of its AnimationClock.

UhrgruppenClock Groups

Im vorherigen Abschnitt wurde beschrieben, Clock wie es verschiedene Objekttypen für verschiedene Arten von Zeitachsen gibt.The preceding section described how there are different types of Clock objects for different types of timelines. Die folgende Abbildung zeigt die Beziehung ClockGroupzwischen AnimationClockdem Zeitmanager, einer , an und einer animierten Abhängigkeitseigenschaft.The following illustration shows the relationship between the time manager, a ClockGroup, an AnimationClock, and an animated dependency property. A ClockGroup wird für Zeitachsen erstellt, die andere Storyboard Zeitachsen gruppieren, z. B. die Klasse, die Animationen und andere Zeitachsen gruppiert.A ClockGroup is created for timelines that group other timelines, such as the Storyboard class, which groups animations and other timelines.

ZeitsteuerungssystemkomponentenTiming system components
Eine ClockGroupA ClockGroup

KompositionComposition

Es ist möglich, mehrere Uhren einer einzelnen Eigenschaft zuzuordnen. Jede Uhr verwendet dann den Ausgabewert der vorangehenden Uhr als Basiswert.It's possible to associate multiple clocks with a single property, in which case each clock uses the output value of the preceding clock as its base value. Die folgende Abbildung AnimationClock zeigt drei Objekte, die auf dieselbe Eigenschaft angewendet werden.The following illustration shows three AnimationClock objects applied to the same property. Uhr1 verwendet den Basiswert der animierten Eigenschaft als Eingabe und verwendet ihn, um die Ausgabe zu generieren.Clock1 uses the base value of the animated property as its input and uses it to generate output. Uhr2 nimmt die Ausgabe von Uhr1 als Eingabe und verwendet sie, um die Ausgabe zu generieren.Clock2 takes the output from Clock1 as its input and uses it to generate output. Uhr3 nimmt die Ausgabe von Uhr2 als Eingabe und verwendet sie, um die Ausgabe zu generieren.Clock3 takes the output from Clock2 as its input and uses it to generate output. Wenn mehrere Uhren gleichzeitig dieselbe Eigenschaft beeinflussen, befinden sie sich in einer Kompositionskette.When multiple clocks affect the same property simultaneously, they are said to be in a composition chain.

ZeitsteuerungssystemkomponentenTiming system components
Eine KompositionsketteA composition chain

Beachten Sie, dass zwar eine Beziehung zwischen AnimationClock der Eingabe und Ausgabe der Objekte in der Kompositionskette erstellt wird, ihr Timingverhalten jedoch nicht beeinträchtigt wird. Clock Objekte (einschließlich AnimationClock Objekte) haben eine hierarchische Abhängigkeit von ihren übergeordneten Clock Objekten.Note that although a relationship is created among the input and output of the AnimationClock objects in the composition chain, their timing behaviors are not affected; Clock objects (including AnimationClock objects) have a hierarchical dependency on their parent Clock objects.

Um mehrere Takte auf dieselbe Eigenschaft Compose HandoffBehavior anzuwenden, Storyboardverwenden Sie AnimationClockdie beim Anwenden einer , Animation oder .To apply multiple clocks to the same property, use the Compose HandoffBehavior when applying a Storyboard, animation, or AnimationClock.

Tick- und EreigniskonsolidierungTicks and Event Consolidation

Zusätzlich zum Berechnen von Ausgabewerten verrichtet der Zeit-Manager andere Aufgaben bei jedem Tick: Er bestimmt den Zustand jeder Uhr und löst ggf. Ereignisse aus.In addition to calculating output values, the time manager does other work every time it ticks: it determines the state of each clock and raises events as appropriate.

Wenn Ticks häufiger auftreten, kann zwischen den einzelnen Ticks Vieles geschehen.While ticks occur frequently, it's possible for a lot of things to happen between ticks. Beispielsweise kann Clock ein angehalten, gestartet und erneut angehalten werden, in diesem Fall hat sich sein CurrentState Wert dreimal geändert.For example, a Clock might be stopped, started, and stopped again, in which case its CurrentState value will have changed three times. Theoretisch könnte CurrentStateInvalidated das Ereignis mehrmals in einem tick ausgelöst werden; Die Timing-Engine konsolidiert jedoch Ereignisse, CurrentStateInvalidated sodass das Ereignis höchstens einmal pro Tick ausgelöst werden kann.In theory, the CurrentStateInvalidated event could be raised multiple times in a single tick; however, the timing engine consolidates events, so that the CurrentStateInvalidated event can be raised at most once per tick. Dies gilt für alle Timing-Ereignisse: Höchstens ein Ereignis Clock jedes Typs wird für ein bestimmtes Objekt ausgelöst.This is true for all timing events: at most one event of each type is raised for a given Clock object.

Wenn Clock ein Status wechselt und in seinen ursprünglichen Zustand zwischen Active Stopped Ticks Activezurückkehrt (z. B. wechseln von zu und zurück zu ), tritt das zugeordnete Ereignis weiterhin auf.When a Clock switches states and returns back to its original state between ticks (such as changing from Active to Stopped and back to Active), the associated event still occurs.

Weitere Informationen zu Zeitsteuerungsereignissen finden Sie unter Übersicht über Zeitsteuerungsereignisse.For more information about timing events, see the Timing Events Overview.

Aktuelle Werte und Basiswerte von EigenschaftenCurrent Values and Base Values of Properties

Eine animierbare Eigenschaft kann zwei Werte haben: einen Basiswert und einen aktuellen Wert.An animatable property can have two values: a base value and a current value. Wenn Sie die Eigenschaft mit ihrem SetValue CLR-Accessor oder der Methode festlegen, legen Sie den Basiswert fest.When you set property using its CLR accessor or the SetValue method, you set its base value. Wenn eine Eigenschaft nicht animiert ist, sind der Basiswert und der aktuelle Wert identisch.When a property is not animated, its base and current values are the same.

Wenn Sie eine Eigenschaft AnimationClock animieren, legt der den aktuellen Wert der Eigenschaft fest.When you animate a property, the AnimationClock sets the property's current value. Das Abrufen des Werts der Eigenschaft über GetValue den CLR-Accessor oder die Methode gibt die Ausgabe AnimationClock des when the AnimationClock is Active oder Fillingzurück.Retrieving the property's value through its CLR accessor or the GetValue method returns the output of the AnimationClock when the AnimationClock is Active or Filling. Sie können den Basiswert der Eigenschaft GetAnimationBaseValue mithilfe der Methode abrufen.You can retrieve the property's base value by using the GetAnimationBaseValue method.

Weitere InformationenSee also