Übersicht über Zeitsteuerungsverhalten
Dieses Thema beschreibt das Timing-Verhalten von Animationen und anderen Timeline-Objekten.
Voraussetzungen
Als Voraussetzung für dieses Thema sollten Sie mit grundlegenden Animationsfunktionen vertraut sein. Weitere Informationen finden Sie unter Übersicht über Animationen.
Zeitachsentypen
Timeline steht für ein Segment der Zeit. Sie bietet Eigenschaften, mit denen Sie z.B. die Länge dieses Abschnitts, seinen Start, die Anzahl der Wiederholungen und die Geschwindigkeit des Fortschreitens der Zeit im Abschnitt Segment angeben.
Klassen, die von der Timeline-Klasse erben, bieten zusätzliche Funktionen, wie z.B. Animation und Medienwiedergabe. WPF stellt folgende Timeline-Typen bereit.
Zeitachsentypen | Beschreibung |
---|---|
AnimationTimeline | Abstrakte Basisklasse für Timeline-Objekte, die Ausgabewerte für das Animieren von Eigenschaften generieren. |
MediaTimeline | Erzeugt eine Ausgabe aus einer Mediendatei. |
ParallelTimeline | Ein Typ von TimelineGroup, der untergeordnete Timeline-Objekte gruppiert und kontrolliert. |
Storyboard | Ein Typ von ParallelTimeline, der Zielinformationen für die darin enthaltenen Zeitachsenobjekte liefert. |
Timeline | Abstrakte Basisklasse, die Zeitsteuerungsverhalten definiert. |
TimelineGroup | Abstrakte Klasse für Timeline-Objekte, die andere Timeline-Objekte enthalten können. |
Eigenschaften, die die Länge einer Zeitachse steuern
Eine Timeline stellt einen Zeitabschnitt dar, und die Länge einer Zeitachse kann auf unterschiedliche Weise beschrieben werden. In der folgenden Tabelle werden mehrere Begriffe für die Beschreibung der Länge einer Zeitachse definiert.
Begriff | BESCHREIBUNG | Eigenschaften |
---|---|---|
Einfache Dauer | Zeitspanne, die eine Zeitachse für eine Vorwärtsiteration benötigt. | Duration |
Eine Wiederholung | Zeitspanne, die eine Zeitachse für eine Vorwärtswiedergabe und, sofern die AutoReverse-Eigenschaft wahr ist, für eine Rückwärtswiedergabe benötigt. | Duration, AutoReverse |
Aktiver Zeitraum | Die Zeitspanne, die eine Zeitachse benötigt, um alle von ihrer RepeatBehavior-Eigenschaft angegebenen Wiederholungen durchzuführen. | Duration, AutoReverse, RepeatBehavior |
Duration-Eigenschaft
Wie bereits erwähnt, stellt eine Zeitachse einen Zeitabschnitt dar. Die Länge dieses Segments wird durch die Duration-Zeitleiste bestimmt. Wenn eine Zeitachse das Ende ihrer Dauer erreicht, wird die Wiedergabe beendet. Wenn die Zeitachse über untergeordnete Zeitachsen verfügt, wird deren Wiedergabe ebenfalls beendet. Bei einer Animation gibt die Duration an, wie lange die Animation für den Übergang vom Startwert zum Endwert benötigt. Die Dauer einer Zeitachse wird manchmal ihre einfache Dauer genannt, um die Dauer einer einzelnen Iteration und die Gesamtlänge der Wiedergabezeit der Animation, einschl. Wiederholungen, zu unterscheiden. Sie können eine Dauer mit einem endlichen Zeitwert oder den speziellen Werten Automatic oder Forever angeben. Die Dauer einer Animation sollte in einen TimeSpan-Wert aufgelöst werden, damit sie einen Übergang zwischen den Werten ausführen kann.
Das folgende Beispiel zeigt ein DoubleAnimation mit Duration von fünf Sekunden.
<DoubleAnimation
Storyboard.TargetName="MyRectangle" Storyboard.TargetProperty="Width"
From="0" To="100" Duration="0:0:5" />
Container-Zeitleisten, wie z. B. Storyboard und ParallelTimeline, haben eine Standarddauer von Automatic, d. h. sie enden automatisch, wenn ihr letztes untergeordnetes Element die Wiedergabe beendet. Das folgende Beispiel zeigt, dass ein Storyboard, dessen Duration in fünf Sekunden aufgelöst wird, d. h. die Zeit, die alle untergeordneten DoubleAnimation-Objekte benötigen, um ihre Arbeit zu erledigen.
<Storyboard >
<DoubleAnimation
Storyboard.TargetName="MyRectangle" Storyboard.TargetProperty="Width"
From="0" To="100" Duration="0:0:5" />
<DoubleAnimation
Storyboard.TargetName="MyOtherRectangle" Storyboard.TargetProperty="Width"
From="0" To="100" Duration="0:0:3" />
</Storyboard>
Indem Sie die Duration einer Zeitleiste eines Containers auf einen TimeSpan-Wert setzen, können Sie erzwingen, dass er länger oder kürzer als seine untergeordneten Timeline-Objekte wiedergegeben wird. Wenn Sie Duration auf einen Wert setzen, der kleiner ist als die Länge der untergeordneten Timeline-Objekte der Container-Zeitleiste, wird die Wiedergabe der untergeordneten Timeline-Objekte beendet, wenn die Container-Zeitleiste endet. Das folgende Beispiel setzt die Duration von Storyboard aus den vorangegangenen Beispielen auf drei Sekunden. Daher wird die erste DoubleAnimation nach drei Sekunden gestoppt, wenn Sie die Breite des Zielrechtecks auf 60 animiert hat.
<Storyboard Duration="0:0:3">
<DoubleAnimation
Storyboard.TargetName="MyRectangle" Storyboard.TargetProperty="Width"
From="0" To="100" Duration="0:0:5" />
<DoubleAnimation
Storyboard.TargetName="MyOtherRectangle" Storyboard.TargetProperty="Width"
From="0" To="100" Duration="0:0:3" />
</Storyboard>
RepeatBehavior-Eigenschaft
Die RepeatBehavior-Eigenschaft eines Timeline-Steuerelements, wie oft es die einfache Dauer wiederholt. Mithilfe der RepeatBehavior-Eigenschaft können Sie angeben, wie oft die Zeitachse (eine Iteration Count) oder die Gesamtdauer der Wiedergabe (einer Wiederholung Duration) wiedergegeben wird. In beiden Fällen durchläuft die Animation so viele vollständige Ausführungen, wie für die erforderliche Anzahl oder Dauer nötig. In der Standardeinstellung haben Zeitachsen einen Iterationszähler von 1.0
, d. h. sie werden einmal abgespielt und nicht wiederholt.
Im folgenden Beispiel wird die RepeatBehavior-Eigenschaft verwendet, um DoubleAnimation doppelt so lange abzuspielen, wie es einfach dauert, indem eine Iterationszahl angegeben wird.
<DoubleAnimation
Storyboard.TargetName="MyRectangle" Storyboard.TargetProperty="Width"
From="0" To="100" Duration="0:0:5"
RepeatBehavior="2x" />
Im nächsten Beispiel wird die RepeatBehavior-Eigenschaft verwendet, um DoubleAnimation für die Hälfte seiner einfachen Dauer zu spielen.
<DoubleAnimation
Storyboard.TargetName="MyRectangle" Storyboard.TargetProperty="Width"
From="0" To="100" Duration="0:0:5"
RepeatBehavior="0.5x" />
Wenn Sie die RepeatBehavior-Eigenschaft eines Timeline auf Forever festlegen, wird die Timeline wiederholt, bis er interaktiv oder durch das Zeitmesssystem gestoppt wird. Das folgende Beispiel verwendet die RepeatBehavior-Eigenschaft, um die DoubleAnimation-Wiedergabe auf unbestimmte Zeit zu verlängern.
<DoubleAnimation
Storyboard.TargetName="MyRectangle" Storyboard.TargetProperty="Width"
From="0" To="100" Duration="0:0:5"
RepeatBehavior="Forever" />
Ein zusätzliches Beispiel finden Sie unter Wiederholen einer Animation.
AutoReverse-Eigenschaft
Die AutoReverse-Eigenschaft gibt an, ob Timeline am Ende jeder Vorwärtsiteration rückwärts abgespielt wird. Das folgende Beispiel setzt die AutoReverse-Eigenschaft von DoubleAnimation auf true
; als Ergebnis animiert sie sich von Null auf 100 und dann von 100 auf Null. Sie wird insgesamt 10 Sekunden wiedergegeben.
<DoubleAnimation
Storyboard.TargetName="MyRectangle" Storyboard.TargetProperty="Width"
From="0" To="100" Duration="0:0:5"
AutoReverse="True" />
Wenn Sie einen Count-Wert verwenden, um die RepeatBehavior einer Timeline anzugeben, und die AutoReverse-Eigenschaft von Timeline ist true
, besteht eine einzelne Wiederholung aus einer Vorwärtsiteration gefolgt von einer Rückwärtsiteration. Im folgenden Beispiel wird die RepeatBehavior von DoubleAnimation dem vorhergehenden Beispiel auf Count von 2 festgelegt. Daher wird die DoubleAnimation 20 Sekunden lang abgespielt: 5 Sekunden vorwärts, 5 Sekunden rückwärts, erneut 5 Sekunden vorwärts und dann 5 Sekunden rückwärts.
<DoubleAnimation
Storyboard.TargetName="MyRectangle" Storyboard.TargetProperty="Width"
From="0" To="100" Duration="0:0:5"
RepeatBehavior="2"
AutoReverse="True" />
Verfügt eine Containerzeitachse über untergeordnete Timeline-Objekte, werden diese umgekehrt, sobald die Containerzeitachse umgekehrt wird. Weitere Beispiele finden Sie unter Angeben, ob die Wiedergaberichtung einer Zeitachse automatisch umgekehrt wird.
BeginTime-Eigenschaft
Mit dieser BeginTime-Eigenschaft können Sie festlegen, wann eine Zeitleiste beginnt. Die Startzeit einer Zeitachse bezieht sich auf die übergeordnete Zeitachse. Eine Anfangszeit von 0 (null) Sekunden bedeutet, dass die Zeitachse gestartet wird, sobald die übergeordnete gestartet wird. Jeder andere Wert erstellt einen Offset zwischen dem Zeitpunkt des Starts der Wiedergabe der übergeordneten Zeitachse und der Wiedergabe der untergeordneten Zeitachse. Beispielsweise bedeutet eine Startzeit von 2 Sekunden, dass die Wiedergabe der Zeitachse gestartet wird, wenn ihre übergeordnete Zeitachse eine Zeit von 2 Sekunden erreicht hat. Standardmäßig haben alle Zeitachsen eine Startzeit von 0 Sekunden. Sie können die Startzeit einer Zeitachse auch auf null
festlegen, wodurch verhindert wird, dass die Zeitachse gestartet wird. In WPF geben Sie mithilfe der x:Null-Markuperweiterung 0 an.
Beachten Sie, dass die Anfangszeit aufgrund ihrer RepeatBehavior-Einstellung nicht jedes Mal angewendet wird, wenn eine Zeitleiste wiederholt wird. Wenn Sie eine Animation mit BeginTime von 10 Sekunden und RepeatBehavior von Forever erstellen würden, gäbe es eine 10-sekündige Verzögerung, bevor die Animation zum ersten Mal abgespielt wird, aber nicht bei jeder weiteren Wiederholung. Soll jedoch die übergeordnete Zeitachse der Animation neu gestartet oder wiederholt werden, tritt die Verzögerung von 10 Sekunden auf.
Die BeginTime-Eigenschaft ist nützlich, um Zeitleisten zu staffeln. Das folgende Beispiel wir ein Storyboard-Objekt erstellt, das zwei untergeordnete DoubleAnimation-Objekte hat. Die erste Animation hat eine Duration von fünf Sekunden, die zweite eine Duration von 3 Sekunden. Das Beispiel setzt die BeginTime der zweiten DoubleAnimation auf 5 Sekunden, sodass sie nach dem Ende der ersten DoubleAnimation abgespielt wird.
<Storyboard>
<DoubleAnimation
Storyboard.TargetName="MyRectangle" Storyboard.TargetProperty="Width"
From="0" To="100" Duration="0:0:5"
BeginTime="0:0:0" />
<DoubleAnimation
Storyboard.TargetName="MyOtherRectangle" Storyboard.TargetProperty="Width"
From="0" To="100" Duration="0:0:3"
BeginTime="0:0:5" />
</Storyboard>
FillBehavior-Eigenschaft
Wenn Timeline das Ende seiner aktiven Gesamtdauer erreicht, legt die FillBehavior-Eigenschaft fest, ob es anhält oder seinen letzten Wert behält. Eine Animation mit einem FillBehavior von HoldEnd "hält" ihren Ausgabewert: die Eigenschaft, die animiert wird, behält den letzten Wert der Animation bei. Der Wert Stop bewirkt, dass die Animation ihre Zieleigenschaft nicht mehr beeinflusst, nachdem sie beendet wurde.
Das folgende Beispiel wir ein Storyboard-Objekt erstellt, das zwei untergeordnete DoubleAnimation-Objekte hat. Beide DoubleAnimation-Objekte animieren die Width einer Rectangle von 0 bis 100. Die Rectangle-Elemente haben nicht-animierte Width-Werte von 500 [geräteunabhängige Pixel].
Die FillBehavior-Eigenschaft des ersten DoubleAnimation ist auf HoldEnd, den Standardwert, festgelegt. Daher bleibt die Breite des Rechtecks nach dem Ende von DoubleAnimation bei 100.
Die FillBehavior-Eigenschaft der zweiten DoubleAnimation ist auf Stop festgelegt. Infolgedessen geht die Width der zweiten Rectangle nach dem Ende von DoubleAnimation auf 500 zurück.
<Rectangle Name="MyRectangle"
Width="500" Height="100"
Opacity="1" Fill="Red">
</Rectangle>
<Rectangle Name="MyOtherRectangle"
Width="500" Height="100"
Opacity="1" Fill="Orange">
</Rectangle>
<Button Content="Start FillBehavior Example">
<Button.Triggers>
<EventTrigger RoutedEvent="Button.Click">
<BeginStoryboard>
<Storyboard>
<DoubleAnimation
Storyboard.TargetName="MyRectangle" Storyboard.TargetProperty="Width"
From="0" To="100" Duration="0:0:5"
FillBehavior="HoldEnd" />
<DoubleAnimation
Storyboard.TargetName="MyOtherRectangle" Storyboard.TargetProperty="Width"
From="0" To="100" Duration="0:0:5"
FillBehavior="Stop" />
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Button.Triggers>
</Button>
Eigenschaften, die die Geschwindigkeit einer Zeitachse steuern
Die Timeline-Klasse bietet drei Eigenschaften, mit denen Sie ihre Geschwindigkeit festlegen können:
SpeedRatio: Legt die Geschwindigkeit fest, mit der die Zeit für eine Timeline fortschreitet. Werte größer als eins erhöhen die Geschwindigkeit des Timeline und seiner Timeline-Unterobjekte; Werte zwischen null und eins verlangsamen sie. Ein Wert von eins bedeutet, dass Timeline mit der gleichen Geschwindigkeit voranschreitet wie sein Elternteil. Die SpeedRatio-Einstellung einer Container-Zeitleiste wirkt sich auch auf alle ihre untergeordneten Timeline-Objekte aus.
AccelerationRatio: Gibt den prozentualen Anteil von Duration der Beschleunigung einer Zeitachse an. Ein Beispiel finden Sie unter Vorgehensweise: Beschleunigen oder Verlangsamen einer Animation.
DecelerationRatio: Gibt den prozentualen Anteil von Duration der Verzögerung einer Zeitachse an. Ein Beispiel finden Sie unter Vorgehensweise: Beschleunigen oder Verlangsamen einer Animation.
Weitere Informationen
.NET Desktop feedback