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

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

VorraussetzungenPrerequisites

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

Die Übersicht über Animationen beschrieben, wie eine Timeline stellt ein Segment, und eine Animation ist eine Art von Timeline , die 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. Selbst eine Timeline, nichts außer einen Zeitabschnitt beschreiben.By itself, a Timeline, doesn't do anything other than just describe a segment of time. Die Zeitachse Clock -Objekt, das die eigentliche Arbeit übernimmt.It's the timeline's Clock object that does the real work. Ebenso Animation nicht tatsächlich Animieren von Eigenschaften: eine Animationsklasse beschreibt, wie Ausgabewerte berechnet werden soll, aber es ist die Clock , die für die Animation, die treibt die Animationsausgabe und wendet sie auf Eigenschaften erstellt wurde.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.

Ein Clock ist ein spezieller Typ des Objekts, die zeitbezogenen Laufzeitzustand für verwaltet die Timeline.A Clock is a special type of object that maintains timing-related run-time state for the Timeline. Er bietet drei Informationen, die für das Animations- und Zeitsteuerungssystem wesentlich sind: CurrentTime, CurrentProgress, und CurrentState.It provides three bits of information that are essential to the animation and timing system: CurrentTime, CurrentProgress, and CurrentState. Ein Clock bestimmt Sie die aktuelle Uhrzeit, den Fortschritt und Status, indem Sie das Zeitsteuerungsverhalten von beschrieben die Timeline: Duration, RepeatBehavior, AutoReverseund so weiter.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 Fällen eine Clock wird automatisch für Ihre Zeitachse erstellt.In most cases, a Clock is created automatically for your timeline. Wenn Sie Animationen mit einem Storyboard oder BeginAnimation -Methode, Uhren automatisch für die Zeitachsen und Animationen erstellt und auf deren 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 erstellen, eine Clock explizit durch Verwenden der CreateClock -Methode der Ihre Timeline.You can also create a Clock explicitly by using the CreateClock method of your Timeline. Die MediaTimeline.CreateClock Methode erstellt eine Uhr des entsprechenden Typs für die Timeline auf die sie aufgerufen wird.The MediaTimeline.CreateClock method creates a clock of the appropriate type for the Timeline on which it is called. Wenn die Timeline untergeordnete Zeitachsen enthält, erstellt Clock auch für diese Objekte.If the Timeline contains child timelines, it creates Clock objects for them as well. Die resultierende Clock Objekte werden in Strukturen, die die Struktur der entsprechen angeordnet der Timeline Objektstruktur, 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 zeigt die Clock Typen, die einige der unterschiedlichen entsprechen Timeline Typen.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 von AnimationTimeline)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 die untergeordneten Clock ObjekteGroups and controls its child Clock objects
Storyboard ClockGroup Gruppiert und steuert die untergeordneten Clock ObjekteGroups and controls its child Clock objects

Sie können eine anwenden AnimationClock Objekte erstellen auf kompatible Abhängigkeitseigenschaften mithilfe der ApplyAnimationClock Methode.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

Beim Animieren von Objekten im WPFWPF, es ist die Zeit-Manager verwaltet die Clock Objekte, die für Ihre Zeitachse erstellt.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 einzelnen Ticks, berechnet der Zeit-Manager den Status aller Active Clock 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 zwischen der Zeit-Manager, und AnimationClock, und einer animierten Abhängigkeitseigenschaft.The following illustration shows the relationship between the time manager, and AnimationClock, and an animated dependency property.

Komponenten des Informationssystems ZeitsteuerungssystemTiming system components
Animieren einer EigenschaftAnimating a property

Wenn der Zeit-Manager tickt, aktualisiert er die Zeit von jedem Active Clock in der Anwendung.When the time manager ticks, it updates the time of every Active Clock in the application. Wenn die Clock ist ein AnimationClock, verwendet der GetCurrentValue Methode der AnimationTimeline aus dem er erstellt wurde, berechnen Sie die aktuelle Ausgabe Wert.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. Die AnimationClock liefert die AnimationTimeline mit der aktuellen Ortszeit, einen Eingabewert, in der Regel der Basiswert der Eigenschaft, und ein 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. Beim Abrufen des Werts einer animierten Eigenschaft mithilfe der GetValue Methode oder dem CLR-Accessor, rufen Sie die Ausgabe von dessen AnimationClock.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 beschrieben, wie es gibt verschiedene Typen von Clock Objekte für verschiedene Typen von Zeitachsen.The preceding section described how there are different types of Clock objects for different types of timelines. Die folgende Abbildung zeigt die Beziehung zwischen der Zeit-Manager, eine ClockGroup, AnimationClock, und einer animierten Abhängigkeitseigenschaft.The following illustration shows the relationship between the time manager, a ClockGroup, an AnimationClock, and an animated dependency property. Ein ClockGroup wird erstellt, für die Zeitachsen, die andere Zeitachsen gruppieren, z. B. die Storyboard -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.

Komponenten des Informationssystems ZeitsteuerungssystemTiming 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 zeigt drei AnimationClock Objekte auf dieselbe Eigenschaft angewendet.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.

Komponenten des Informationssystems ZeitsteuerungssystemTiming system components
Eine KompositionsketteA composition chain

Beachten Sie, dass, obwohl eine Beziehung zwischen Eingabe und Ausgabe erstellt, wird die AnimationClock Objekte in der Kompositionskette, ihr Zeitsteuerungsverhalten sind nicht betroffen. Clock Objekte (einschließlich AnimationClock Objekten) besitzen eine hierarchische Abhängigkeit von ihren übergeordneten Clock Objekte.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 Uhren auf dieselbe Eigenschaft anzuwenden, verwenden die Compose HandoffBehavior beim Anwenden einer Storyboard, Animation oder AnimationClock.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. Z. B. eine Clock möglicherweise werden beendet, gestartet und in diesem Fall in diesem Fall die CurrentState Wert wird dreimal geändert haben.For example, a Clock might be stopped, started, and stopped again, in which case its CurrentState value will have changed three times. In der Theorie der CurrentStateInvalidated Ereignis kann mehrere Male in einem einzelnen Tick ausgelöst werden; die zeitsteuerungs-Engine konsolidiert jedoch Ereignisse, sodass die CurrentStateInvalidated -Ereignis höchstens einmal pro Teilstrich 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 Zeitsteuerungsereignisse: maximal ein Ereignis jedes Typs wird ausgelöst, für einen bestimmten Clock Objekt.This is true for all timing events: at most one event of each type is raised for a given Clock object.

Wenn eine Clock Zustände wechselt und wieder in den ursprünglichen Zustand zwischen Ticks (z. B. von Active zu Stopped und zurück zum Active), das zugeordnete Ereignis weiterhin auftritt.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. Beim Festlegen der Eigenschaft mit dem CLR-Accessor oder SetValue -Methode, die den Basiswert festlegen.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 animieren der AnimationClock legt die Eigenschaft des aktuelle Wert.When you animate a property, the AnimationClock sets the property's current value. Abrufen des Eigenschaftswerts über dessen CLR-Accessor oder GetValue Methode wird die Ausgabe von der AnimationClock bei der AnimationClock ist Active oder Filling.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 abrufen, mithilfe der GetAnimationBaseValue Methode.You can retrieve the property's base value by using the GetAnimationBaseValue method.

Siehe auchSee also