Cenni preliminari sull'animazione e sul sistema di temporizzazioneAnimation and Timing System Overview

Questo argomento viene descritto l'utilizzo di animazione, il sistema di temporizzazione Timeline, e Clock classi per l'animazione di proprietà.This topic describes how the timing system uses the animation, Timeline, and Clock classes to animate properties.

PrerequisitiPrerequisites

Per la comprensione di questo argomento, è necessario essere in grado di usare le animazioni WPFWPF per animare le proprietà, come descritto in Cenni preliminari sull'animazione.To understand this topic, you should be able to use WPFWPF animations to animate properties, as described in the Animation Overview. È anche utile conoscere le proprietà di dipendenza. Per altre informazioni, vedere Cenni preliminari sulle proprietà di dipendenza.It also helps to be familiar with dependency properties; for more information, see the Dependency Properties Overview.

Sequenze temporali e orologiTimelines and Clocks

Il panoramica dell'animazione descritto come un Timeline rappresenta un segmento di tempo e un'animazione è un tipo di Timeline che produce valori di output.The Animation Overview described how a Timeline represents a segment of time, and an animation is a type of Timeline that produces output values. Di per sé un Timeline, non esegue alcuna operazione tranne limita a descrivere un intervallo di tempo.By itself, a Timeline, doesn't do anything other than just describe a segment of time. È la sequenza temporale Clock oggetto che esegue il lavoro effettivo.It's the timeline's Clock object that does the real work. Analogamente, animazione non anima proprio proprietà: una classe di animazione viene descritto il calcolo di valori di output, ma è il Clock che è stato creato per l'animazione che l'output di animazione e ad applicarlo alle proprietà.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.

Oggetto Clock è un tipo speciale di oggetto che gestisce lo stato di runtime correlati alla temporizzazione per il Timeline.A Clock is a special type of object that maintains timing-related run-time state for the Timeline. Fornisce tre informazioni essenziali per l'animazione e il sistema di temporizzazione: CurrentTime, CurrentProgress, e CurrentState.It provides three bits of information that are essential to the animation and timing system: CurrentTime, CurrentProgress, and CurrentState. Oggetto Clock determina l'ora corrente, lo stato di avanzamento e lo stato tramite i comportamenti di temporizzazione descritti dal relativo Timeline: Duration, RepeatBehavior, AutoReversee così via.A Clock determines its current time, progress, and state by using the timing behaviors described by its Timeline: Duration, RepeatBehavior, AutoReverse, and so on.

Nella maggior parte dei casi, un Clock viene creato automaticamente per la sequenza temporale.In most cases, a Clock is created automatically for your timeline. Quando si aggiunge un'animazione con un Storyboard o BeginAnimation (metodo), gli orologi creati automaticamente per le sequenze temporali e le animazioni e applicati alle proprietà di destinazione.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. È inoltre possibile creare un Clock in modo esplicito utilizzando il CreateClock metodo i Timeline.You can also create a Clock explicitly by using the CreateClock method of your Timeline. Il MediaTimeline.CreateClock metodo crea un orologio del tipo appropriato per il Timeline su cui viene chiamato.The MediaTimeline.CreateClock method creates a clock of the appropriate type for the Timeline on which it is called. Se il Timeline contiene sequenze temporali figlio, viene creato Clock anche oggetti relativa.If the Timeline contains child timelines, it creates Clock objects for them as well. Il valore risultante Clock oggetti siano disposti in strutture ad albero che corrisponde alla struttura del Timeline della struttura ad albero di oggetti da cui sono stati creati.The resulting Clock objects are arranged in trees that match the structure of the Timeline objects tree from which they are created.

Esistono tipi di orologi diversi per tipi di sequenze temporali diversi.There are different types of clocks for different types of timelines. La tabella seguente mostra il Clock tipi che corrispondono ad alcune delle diverse Timeline tipi.The following table shows the Clock types that correspond to some of the different Timeline types.

Tipo di sequenza temporaleTimeline type Tipo di orologioClock type Scopo dell'orologioClock purpose
Animazione (eredita da AnimationTimeline)Animation (inherits from AnimationTimeline) AnimationClock Genera valori di output per una proprietà di dipendenza.Generates output values for a dependency property.
MediaTimeline MediaClock Elabora un file multimediale.Processes a media file.
ParallelTimeline ClockGroup Gruppi e controlli figlio Clock oggettiGroups and controls its child Clock objects
Storyboard ClockGroup Gruppi e controlli figlio Clock oggettiGroups and controls its child Clock objects

È possibile applicare qualsiasi AnimationClock oggetti crei alle proprietà di dipendenza compatibili con il ApplyAnimationClock metodo.You can apply any AnimationClock objects you create to compatible dependency properties by using the ApplyAnimationClock method.

In scenari di prestazioni, ad esempio un numero elevato di oggetti simili, l'animazione gestisce la propria Clock utilizzare può offrire i vantaggi di prestazioni.In performance-intensive scenarios, such as animating large numbers of similar objects, managing your own Clock use can provide performance benefits.

Orologi e gestore del tempoClocks and the Time Manager

Quando si aggiunge un'animazione oggetti WPFWPF, è il gestore del tempo che gestisce il Clock gli oggetti creati per le sequenze temporali.When you animate objects in WPFWPF, it’s the time manager that manages the Clock objects created for your timelines. Il gestore del tempo è la radice di una struttura ad albero di oggetti Clock e controlla il flusso di tempo nella struttura.The time manager is the root of a tree of Clock objects and controls the flow of time in that tree. Il gestore del tempo viene creato automaticamente per ogni applicazione WPFWPF ed è invisibile allo sviluppatore di applicazioni.A time manager is automatically created for each WPFWPF application and is invisible to the application developer. Ogni secondo vengono emessi numerosi e il numero effettivo di tick emessi ogni secondo varia a seconda delle risorse di sistema disponibili.The time manager "ticks" many times per second; the actual number of ticks that occur each second varies depending on available system resources. Durante ciascuno di questi segni di graduazione, viene calcolato lo stato di tutti Active Clock oggetti nell'albero della durata.During each one of these ticks, the time manager computes the state of all Active Clock objects in the timing tree.

Nella figura seguente viene illustrata la relazione tra il gestore del tempo e AnimationClocke una proprietà di dipendenza animata.The following illustration shows the relationship between the time manager, and AnimationClock, and an animated dependency property.

Componenti del sistema di intervalloTiming system components
Animazione di una proprietàAnimating a property

Tick, viene aggiornata l'ora di ogni Active Clock nell'applicazione.When the time manager ticks, it updates the time of every Active Clock in the application. Se il Clock è un AnimationClock, Usa il GetCurrentValue metodo il AnimationTimeline da cui è stato creato per calcolare il corrente valore di output.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. Il AnimationClock fornisce il AnimationTimeline con l'ora locale corrente, un valore di input è in genere il valore della proprietà di base e un valore di destinazione predefinito.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. Quando si recupera il valore di un oggetto animato utilizzando proprietà di GetValue metodo o la funzione di accesso CLR, si otterrà l'output del relativo 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.

Gruppi di orologiClock Groups

Nella sezione precedente descritto esistono diversi tipi di Clock oggetti per i diversi tipi di sequenze temporali.The preceding section described how there are different types of Clock objects for different types of timelines. Nella figura seguente viene illustrata la relazione tra il gestore del tempo, un ClockGroup, AnimationClocke una proprietà di dipendenza animata.The following illustration shows the relationship between the time manager, a ClockGroup, an AnimationClock, and an animated dependency property. Oggetto ClockGroup viene creato per le sequenze temporali che raggruppano altre sequenze, ad esempio il Storyboard (classe), che raggruppa animazioni e altre sequenze temporali.A ClockGroup is created for timelines that group other timelines, such as the Storyboard class, which groups animations and other timelines.

Componenti del sistema di intervalloTiming system components
Gruppo di orologiA ClockGroup

ComposizioneComposition

È possibile associare più orologi a una singola proprietà e in tal caso ogni orologio usa il valore di output dell'orologio precedente come valore di base.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. La figura seguente mostra tre AnimationClock oggetti applicata alla stessa proprietà.The following illustration shows three AnimationClock objects applied to the same property. L'orologio1 usa il valore di base della proprietà animata come input e lo usa per generare l'output.Clock1 uses the base value of the animated property as its input and uses it to generate output. L'orologio2 accetta l'output dall'orologio1 come input e lo usa per generare l'output.Clock2 takes the output from Clock1 as its input and uses it to generate output. L'orologio3 accetta l'output dall'orologio2 come input e lo usa per generare l'output.Clock3 takes the output from Clock2 as its input and uses it to generate output. Quando più orologi interessano contemporaneamente una stessa proprietà, formano una catena di composizione.When multiple clocks affect the same property simultaneously, they are said to be in a composition chain.

Componenti del sistema di intervalloTiming system components
Catena di composizioneA composition chain

Si noti che anche se viene creata una relazione tra l'input e output del AnimationClock oggetti nella catena di composizione, i comportamenti di temporizzazione non sono interessati; Clock oggetti (inclusi AnimationClock oggetti) presentano una dipendenza gerarchica padre Clock oggetti.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.

Per applicare più orologi alla stessa proprietà, utilizzare il Compose HandoffBehavior quando si applica un Storyboard, animazione, o AnimationClock.To apply multiple clocks to the same property, use the Compose HandoffBehavior when applying a Storyboard, animation, or AnimationClock.

Tick e consolidamento degli eventiTicks and Event Consolidation

Oltre a calcolare i valori di output, a ogni tick il gestore del tempo determina lo stato di ogni orologio e genera gli eventi appropriati.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.

Sebbene gli eventi tick siano piuttosto frequenti, è possibile che tra essi avvengano vari eventi.While ticks occur frequently, it's possible for a lot of things to happen between ticks. Ad esempio, un Clock potrebbe essere arrestato, avviato e nuovamente interrotta, nel qual caso il CurrentState valore verrà cambiato tre volte.For example, a Clock might be stopped, started, and stopped again, in which case its CurrentState value will have changed three times. In teoria, il CurrentStateInvalidated evento può essere generato più volte in un singolo tick; tuttavia, il motore di temporizzazione consente di consolidare gli eventi, in modo che il CurrentStateInvalidated evento può essere generato più di una volta per tick.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. Questo vale per tutti gli eventi di temporizzazione: al massimo un evento di ogni tipo viene generato per un determinato Clock oggetto.This is true for all timing events: at most one event of each type is raised for a given Clock object.

Quando un Clock modifica gli Stati e torna allo stato originale tra segni di graduazione (ad esempio la modifica da Active a Stopped e al Active), viene comunque generato l'evento associato.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.

Per altre informazioni sugli eventi di temporizzazione, vedere Cenni preliminari sugli eventi di tempo.For more information about timing events, see the Timing Events Overview.

Valori correnti e valori di base delle proprietàCurrent Values and Base Values of Properties

A una proprietà che è possibile animare possono essere associati due valori, uno di base e uno corrente.An animatable property can have two values: a base value and a current value. Quando si imposta proprietà utilizzando la funzione di accesso CLR o SetValue (metodo), impostare il valore di base.When you set property using its CLR accessor or the SetValue method, you set its base value. Quando una proprietà non è animata, i valori di base e corrente corrispondono.When a property is not animated, its base and current values are the same.

Quando si aggiunge un'animazione, una proprietà di AnimationClock imposta la proprietà corrente valore.When you animate a property, the AnimationClock sets the property's current value. Il recupero del valore della proprietà tramite la funzione di accesso CLR o GetValue il metodo restituisce l'output del AnimationClock quando il AnimationClock è Active o 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. È possibile recuperare il valore della proprietà base utilizzando il GetAnimationBaseValue metodo.You can retrieve the property's base value by using the GetAnimationBaseValue method.

Vedere ancheSee Also

Cenni preliminari sull'animazioneAnimation Overview
Cenni preliminari sugli eventi di tempoTiming Events Overview
Cenni preliminari sui comportamenti temporaliTiming Behaviors Overview