Vue d'ensemble de l'animation et du système de minutageAnimation and Timing System Overview

Cette rubrique décrit comment le système de minutage utilise l’animation, Timeline, et Clock classes pour animer des propriétés.This topic describes how the timing system uses the animation, Timeline, and Clock classes to animate properties.

PrérequisPrerequisites

Pour comprendre cette rubrique, vous devez être en mesure d’utiliser des animations WPFWPF pour animer des propriétés, comme décrit dans la Vue d’ensemble de l’animation.To understand this topic, you should be able to use WPFWPF animations to animate properties, as described in the Animation Overview. Il est également conseillé de vous familiariser avec les propriétés de dépendance. Pour plus d’informations, consultez Vue d’ensemble des propriétés de dépendance.It also helps to be familiar with dependency properties; for more information, see the Dependency Properties Overview.

Chronologies et horlogesTimelines and Clocks

Le vue d’ensemble de l’Animation décrit comment un Timeline représente un segment de temps et d’une animation est un type de Timeline qui produit des valeurs de sortie.The Animation Overview described how a Timeline represents a segment of time, and an animation is a type of Timeline that produces output values. En soi, un Timeline, ne fait rien d’autre que décrire un segment de temps.By itself, a Timeline, doesn't do anything other than just describe a segment of time. Il s’agit de la chronologie Clock objet qui effectue le travail réel.It's the timeline's Clock object that does the real work. De même, l’animation n’anime pas réellement propriétés : une classe d’animation décrit comment les valeurs de sortie doivent être calculées, mais il est le Clock qui a été créé pour l’animation qui achemine la sortie d’animation et l’applique aux propriétés.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.

Un Clock est un type spécial d’objet qui conserve l’état d’exécution de temporisation pour la Timeline.A Clock is a special type of object that maintains timing-related run-time state for the Timeline. Il fournit trois éléments d’information qui sont essentielles à l’animation et le système de minutage : CurrentTime, CurrentProgress, et CurrentState.It provides three bits of information that are essential to the animation and timing system: CurrentTime, CurrentProgress, and CurrentState. Un Clock détermine l’heure actuelle, sa progression et l’état en utilisant les comportements de minutage décrits par sa Timeline: Duration, RepeatBehavior, AutoReverse, et ainsi de suite.A Clock determines its current time, progress, and state by using the timing behaviors described by its Timeline: Duration, RepeatBehavior, AutoReverse, and so on.

Dans la plupart des cas, un Clock est créé automatiquement pour votre chronologie.In most cases, a Clock is created automatically for your timeline. Lorsque vous animez en utilisant un Storyboard ou BeginAnimation (méthode), les horloges sont automatiquement créés pour vos chronologies et animations et appliquées à leurs propriétés ciblées.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. Vous pouvez également créer un Clock explicitement en utilisant la CreateClock méthode de votre Timeline.You can also create a Clock explicitly by using the CreateClock method of your Timeline. Le MediaTimeline.CreateClock méthode crée une horloge du type approprié pour le Timeline sur laquelle elle est appelée.The MediaTimeline.CreateClock method creates a clock of the appropriate type for the Timeline on which it is called. Si le Timeline contient des chronologies enfants, il crée Clock des objets pour eux.If the Timeline contains child timelines, it creates Clock objects for them as well. Résultant Clock objets sont organisés en arborescences qui correspondent à la structure de la Timeline arborescence des objets à partir de laquelle ils sont créés.The resulting Clock objects are arranged in trees that match the structure of the Timeline objects tree from which they are created.

Il existe différents types d’horloges pour différents types de chronologies.There are different types of clocks for different types of timelines. Le tableau suivant présente le Clock types qui correspondent à certains des différents Timeline types.The following table shows the Clock types that correspond to some of the different Timeline types.

Type de chronologieTimeline type Type d’horlogeClock type Objectif de l’horlogeClock purpose
Animation (hérite de AnimationTimeline)Animation (inherits from AnimationTimeline) AnimationClock Génère les valeurs de sortie d’une propriété de dépendance.Generates output values for a dependency property.
MediaTimeline MediaClock Traite un fichier multimédia.Processes a media file.
ParallelTimeline ClockGroup Regroupe et contrôle son enfant Clock objetsGroups and controls its child Clock objects
Storyboard ClockGroup Regroupe et contrôle son enfant Clock objetsGroups and controls its child Clock objects

Vous pouvez appliquer les AnimationClock objets vous créez aux propriétés de dépendance compatibles en utilisant la ApplyAnimationClock (méthode).You can apply any AnimationClock objects you create to compatible dependency properties by using the ApplyAnimationClock method.

Dans les scénarios exigeants en performances, tels que l’animation grand nombre d’objets semblables, la gestion de vos propres Clock utilisation peut améliorer les performances.In performance-intensive scenarios, such as animating large numbers of similar objects, managing your own Clock use can provide performance benefits.

Horloges et gestionnaire de tempsClocks and the Time Manager

Lorsque vous animez des objets dans WPFWPF, il est le Gestionnaire de temps qui gère la Clock objets créés pour vos chronologies.When you animate objects in WPFWPF, it’s the time manager that manages the Clock objects created for your timelines. Le gestionnaire de temps est la racine d’une arborescence d’objets Clock et contrôle le flux de temps dans cette arborescence.The time manager is the root of a tree of Clock objects and controls the flow of time in that tree. Un gestionnaire de temps est créé automatiquement pour chaque application WPFWPF et reste invisible au développeur d'applications.A time manager is automatically created for each WPFWPF application and is invisible to the application developer. Le gestionnaire de temps a de nombreuses graduations par seconde. Le nombre réel de cycles qui se produisent à chaque seconde varie selon les ressources système disponibles.The time manager "ticks" many times per second; the actual number of ticks that occur each second varies depending on available system resources. Pendant chacun de ces battements, le Gestionnaire de temps calcule l’état de tous les Active Clock objets dans l’arborescence de minutage.During each one of these ticks, the time manager computes the state of all Active Clock objects in the timing tree.

L’illustration suivante montre la relation entre le Gestionnaire de temps, et AnimationClocket une propriété de dépendance animée.The following illustration shows the relationship between the time manager, and AnimationClock, and an animated dependency property.

Composants du système de minutageTiming system components
Animation d’une propriétéAnimating a property

Lorsque le Gestionnaire de temps effectue un battement, il met à jour l’heure de chaque Active Clock dans l’application.When the time manager ticks, it updates the time of every Active Clock in the application. Si le Clock est un AnimationClock, il utilise le GetCurrentValue méthode de la AnimationTimeline à partir duquel il a été créé pour calculer actuelle à la valeur de sortie.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. Le AnimationClock fournit le AnimationTimeline avec l’heure locale actuelle, une valeur d’entrée, qui est généralement la valeur de la propriété de base et une valeur de destination par défaut.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. Lorsque vous récupérez la valeur animée par propriété à l’aide du GetValue méthode ou son accesseur CLR, vous obtenez la sortie de son 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.

Groupes d’horlogesClock Groups

La section précédente a décrit les différents types de Clock objets pour différents types de chronologies.The preceding section described how there are different types of Clock objects for different types of timelines. L’illustration suivante montre la relation entre le Gestionnaire de temps, un ClockGroup, un AnimationClocket une propriété de dépendance animée.The following illustration shows the relationship between the time manager, a ClockGroup, an AnimationClock, and an animated dependency property. Un ClockGroup est créé pour les chronologies qui groupent d’autres chronologies, telles que le Storyboard (classe), qui regroupe des animations et autres chronologies.A ClockGroup is created for timelines that group other timelines, such as the Storyboard class, which groups animations and other timelines.

Composants du système de minutageTiming system components
Un groupe d’horlogesA ClockGroup

CompositionComposition

Il est possible d’associer plusieurs horloges à une seule propriété, auquel cas chaque l’horloge utilise la valeur de sortie de l’exemple d’horloge précédent comme valeur de 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. L’illustration suivante montre trois AnimationClock objets appliqués à la même propriété.The following illustration shows three AnimationClock objects applied to the same property. Clock1 utilise la valeur de base de la propriété animée comme entrée et l’utilise pour générer la sortie.Clock1 uses the base value of the animated property as its input and uses it to generate output. Clock2 prend la sortie de Clock1 comme entrée et l’utilise pour générer la sortie.Clock2 takes the output from Clock1 as its input and uses it to generate output. Clock3 prend la sortie de Clock2 comme entrée et l’utilise pour générer la sortie.Clock3 takes the output from Clock2 as its input and uses it to generate output. Lorsque plusieurs horloges affectent la même propriété simultanément, on dit qu’elles font partie d’une chaîne de composition.When multiple clocks affect the same property simultaneously, they are said to be in a composition chain.

Composants du système de minutageTiming system components
Une chaîne de compositionA composition chain

Notez que même si une relation est créée entre l’entrée et la sortie de la AnimationClock des objets dans la chaîne de composition, leurs comportements de minutage ne sont pas affectées ; Clock objets (y compris AnimationClock objets) ont une dépendance hiérarchique sur leur parent Clock objets.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.

Pour appliquer plusieurs horloges à la même propriété, utilisez le Compose HandoffBehavior lors de l’application un Storyboard, animation, ou AnimationClock.To apply multiple clocks to the same property, use the Compose HandoffBehavior when applying a Storyboard, animation, or AnimationClock.

Graduations et consolidation des événementsTicks and Event Consolidation

En plus du calcul des valeurs de sortie, le gestionnaire de temps effectue un autre travail à chaque graduation : il détermine l’état de chaque horloge et déclenche des événements comme il convient.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.

Étant donné que ces cycles sont fréquents, beaucoup de choses peuvent se passer entre chaque cycle.While ticks occur frequently, it's possible for a lot of things to happen between ticks. Par exemple, un Clock peut être arrêté, démarré et arrêté à nouveau, auquel cas sa CurrentState valeur aura changé trois fois.For example, a Clock might be stopped, started, and stopped again, in which case its CurrentState value will have changed three times. En théorie, le CurrentStateInvalidated événement peut être déclenché plusieurs fois dans un seul battement ; Toutefois, le moteur de minutage consolide les événements, afin que le CurrentStateInvalidated peut être déclenché au maximum une fois par battement.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. Cela est vrai pour tous les événements d’horloge : un événement de chaque type au plus est déclenché pour une donnée Clock objet.This is true for all timing events: at most one event of each type is raised for a given Clock object.

Quand un Clock change d’état et revient à son état d’origine entre les battements (telles que la modification de Active à Stopped , puis vers Active), l’événement associé se produit toujours.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.

Pour plus d'informations sur les événements de minuterie, consultez Vue d'ensemble des événements de minuterie.For more information about timing events, see the Timing Events Overview.

Valeurs actuelles et les valeurs de base des propriétésCurrent Values and Base Values of Properties

Une propriété pouvant être animée peut avoir deux valeurs : une valeur de base et une valeur actuelle.An animatable property can have two values: a base value and a current value. Lorsque vous définissez la propriété à l’aide de son accesseur CLR ou la SetValue (méthode), vous définissez sa valeur de base.When you set property using its CLR accessor or the SetValue method, you set its base value. Lorsqu’une propriété n’est pas animée, ses valeurs de base et actuelles sont identiques.When a property is not animated, its base and current values are the same.

Lorsque vous animez une propriété, le AnimationClock définit la propriété actuel valeur.When you animate a property, the AnimationClock sets the property's current value. Récupération de la valeur de propriété via son accesseur CLR ou la GetValue méthode retourne la sortie de la AnimationClock lorsque le AnimationClock est Active ou 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. Vous pouvez récupérer la valeur de base de la propriété à l’aide de la GetAnimationBaseValue (méthode).You can retrieve the property's base value by using the GetAnimationBaseValue method.

Voir aussiSee also