Partager via


Vue d’ensemble du système d’animation et de minutage

Cette rubrique décrit comment le système de minutage utilise l’animation, Timelineet Clock les classes pour animer les propriétés.

Conditions préalables

Pour comprendre cette rubrique, vous devez être en mesure d’utiliser des animations WPF pour animer des propriétés, comme décrit dans la vue d’ensemble de l’animation. Il permet également d’être familiarisé avec les propriétés de dépendance ; pour plus d’informations, consultez la vue d’ensemble des propriétés de dépendance.

Chronologies et horloges

La vue d'ensemble de l'animation a décrit comment un Timeline représente un segment de temps, et une animation est un type de Timeline qui produit des valeurs de sortie. Par lui-même, un Timeline, ne fait rien d’autre que simplement décrire un segment de temps. Il s’agit de l’objet de la chronologie Clock qui effectue vraiment le travail. De même, l’animation n’anime pas réellement les propriétés : une classe d’animation décrit comment les valeurs de sortie doivent être calculées, mais c’est celle Clock qui a été créée pour l’animation qui pilote la sortie d’animation et l’applique aux propriétés.

Un Clock est un type spécial d'objet qui gère l'état d'exécution lié à la gestion du temps pour le Timeline. Il fournit trois bits d’informations essentiels à l’animation et au système de minutage : CurrentTime, CurrentProgresset CurrentState. A Clock détermine son heure actuelle, sa progression et son état à l’aide des comportements de minutage décrits par son Timeline: Duration, RepeatBehavior, AutoReverse, et ainsi de suite.

Dans la plupart des cas, un Clock est créé automatiquement pour votre chronologie. Lorsque vous animez à l’aide d’une Storyboard ou de la BeginAnimation méthode, les horloges sont automatiquement créées pour vos chronologies et animations et appliquées à leurs propriétés ciblées. Vous pouvez également créer un Clock explicitement à l’aide de la méthode CreateClock de votre Timeline. La MediaTimeline.CreateClock méthode crée une horloge du type approprié pour l’élément Timeline sur lequel elle est appelée. Si l'Timeline contient des chronologies enfants, il crée également des objets Clock pour eux. Les objets résultants Clock sont organisés dans des arborescences qui correspondent à la structure de l’arborescence Timeline des objets à partir de laquelle ils sont créés.

Il existe différents types d’horloges pour différents types de chronologies. Le tableau suivant montre les Clock types qui correspondent à certains des différents Timeline types.

Type de chronologie Type d’horloge Objectif de l’horloge
Animation (hérite de AnimationTimeline) AnimationClock Génère des valeurs de sortie pour une propriété de dépendance.
MediaTimeline MediaClock Traite un fichier multimédia.
ParallelTimeline ClockGroup Groupes et contrôle ses objets enfants Clock
Storyboard ClockGroup Groupes et contrôle ses objets enfants Clock

Vous pouvez appliquer tous les AnimationClock objets que vous créez aux propriétés de dépendance compatibles à l’aide de la ApplyAnimationClock méthode.

Dans les scénarios gourmands en performances, tels que l’animation d’un grand nombre d’objets similaires, la gestion de votre propre Clock utilisation peut offrir des avantages en matière de performances.

Horloges et gestionnaire de temps

Lorsque vous animez des objets dans WPF, il s’agit du gestionnaire de temps qui gère les Clock objets créés pour vos chronologies. Le gestionnaire de temps est la racine d’une arborescence d’objets Clock et contrôle le flux de temps dans cette arborescence. Un gestionnaire de temps est automatiquement créé pour chaque application WPF et est invisible pour le développeur de l’application. Le gestionnaire de temps « ticks » plusieurs fois par seconde ; le nombre réel de cycles qui se produisent chaque seconde varie en fonction des ressources système disponibles. Pendant chacun de ces tics, le gestionnaire de temps calcule l’état de tous les ActiveClock objets dans l’arbre de temps.

L’illustration suivante montre la relation entre le gestionnaire de temps et AnimationClockune propriété de dépendance animée.

Composants système de minutage et gestionnaire de temps.
Animation d’une propriété

Lorsque le gestionnaire de temps est coché, il met à jour l’heure de chaque ActiveClock dans l’application. S’il s’agit d’un Clock, il utilise la méthode AnimationClock du GetCurrentValue à partir duquel il a été créé pour calculer sa valeur de sortie actuelle. Le AnimationClock fournit à AnimationTimeline l'heure locale actuelle, une valeur d'entrée qui est typiquement la valeur de base de la propriété, et une valeur de destination par défaut. Lorsque vous récupérez la valeur d’une propriété animée à l’aide de la méthode GetValue ou de son accesseur CLR, vous obtenez le résultat de son AnimationClock.

Groupes d’horloges

La section précédente décrit comment il existe différents types d’objets Clock pour différents types de chronologies. L’illustration suivante montre la relation entre le gestionnaire de temps, un ClockGroup, un AnimationClocket une propriété de dépendance animée. Un ClockGroup est créé pour les chronologies qui regroupent d’autres chronologies, telles que la Storyboard classe, qui regroupe les animations et d’autres chronologies.

Composants du système de synchronisation avec le gestionnaire de temps et les propriétés de dépendance.
Un ClockGroup

Composition

Il est possible d’associer plusieurs horloges à une propriété unique, auquel cas chaque horloge utilise la valeur de sortie de l’horloge précédente comme valeur de base. L’illustration suivante montre trois AnimationClock objets appliqués à la même propriété. Clock1 utilise la valeur de base de la propriété animée comme entrée et l’utilise pour générer la sortie. Clock2 prend la sortie de Clock1 comme entrée et l’utilise pour générer la sortie. Clock3 prend la sortie de Clock2 comme entrée et l’utilise pour générer la sortie. Lorsque plusieurs horloges affectent simultanément la même propriété, elles sont dites être dans une chaîne de composition.

Composants système de minutage composés de plusieurs propriétés de dépendance.
Chaîne de composition

Notez qu’une relation est créée entre l’entrée et la AnimationClock sortie des objets dans la chaîne de composition, leurs comportements de minutage ne sont pas affectés ; Clock les objets (y compris AnimationClock les objets) ont une dépendance hiérarchique sur leurs objets parents Clock .

Pour appliquer plusieurs horloges à la même propriété, utilisez l’option lors de l’application ComposeHandoffBehavior d’une , d’une animation ou Storyboardd’une AnimationClock.

Tics et regroupement d'événements

En plus du calcul des valeurs de sortie, le gestionnaire de temps effectue d’autres tâches chaque fois qu’il est coché : il détermine l’état de chaque horloge et déclenche des événements selon les besoins.

Bien que les tics se produisent fréquemment, il est possible que de nombreuses choses se produisent entre les tics. Par exemple, un Clock peut être arrêté, démarré et arrêté à nouveau, auquel cas sa CurrentState valeur aura changé trois fois. En théorie, l’événement CurrentStateInvalidated peut être déclenché plusieurs fois dans une seule graduation ; toutefois, le moteur de minutage consolide les événements, afin que l’événement CurrentStateInvalidated puisse être déclenché au plus une fois par graduation. Cela est vrai pour tous les événements de minutage : au plus un événement de chaque type est déclenché pour un objet donné Clock .

Lorsqu’un Clock commutateur change d’état et revient à son état d’origine entre deux ticks (par exemple, changeant de Active à Stopped et retour à Active), l’événement associé se produit toujours.

Pour plus d’informations sur les événements de minutage, consultez la vue d’ensemble des événements de minutage.

Valeurs actuelles et valeurs de base des propriétés

Une propriété animatable peut avoir deux valeurs : une valeur de base et une valeur actuelle. Lorsque vous définissez la propriété à l’aide de son accesseur CLR ou de la SetValue méthode, vous définissez sa valeur de base. Lorsqu’une propriété n’est pas animée, ses valeurs de base et actuelles sont identiques.

Lorsque vous animez une propriété, la AnimationClock propriété définit la valeur actuelle de la propriété. La récupération de la valeur de la propriété par le biais de son accesseur CLR ou de la méthode GetValue retourne la sortie de AnimationClock lorsque AnimationClock est Active ou Filling. Vous pouvez récupérer la valeur de base de la propriété à l’aide de la GetAnimationBaseValue méthode.

Voir aussi