Vue d'ensemble de l'animation et du système de minutage

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

Prérequis

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 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.

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. Seul, un Timeline , ne fait rien d’autre que décrire un segment de temps. C’est l’objet de la chronologie Clock qui fait le travail réel. 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 le Clock qui a été créé pour l’animation qui pilote la sortie de l’animation et l’applique aux propriétés.

Un Clock est un type spécial d’objet qui conserve l’état d’exécution relatif à la temporisation pour Timeline . Il fournit trois bits d’informations essentielles au système d’animation et de minutage : CurrentTime , CurrentProgress et CurrentState . Un Clock détermine son heure, la progression et l’État actuels à 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 de 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 CreateClock de la méthode de votre Timeline . La MediaTimeline.CreateClock méthode crée une horloge du type approprié pour le Timeline sur lequel elle est appelée. Si Timeline contient des chronologies enfants, il crée Clock également des objets pour eux. Les objets résultants Clock sont organisés en arborescences qui correspondent à la structure de l' Timeline arborescence 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 présente les Clock types qui correspondent à certains des types différents Timeline .

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

Vous pouvez appliquer n’importe quel AnimationClock objet 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 créé automatiquement pour chaque application WPF et reste invisible au développeur d'applications. 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. Pendant chacun de ces battements, le gestionnaire de temps calcule l’état de tous les Active Clock objets dans l’arborescence de minutage.

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

Composants du système de minutage
Animation d’une propriété

Quand le gestionnaire de temps s’amorce, il met à jour l’heure de chaque Active Clock dans l’application. Si Clock est un AnimationClock , il utilise la GetCurrentValue méthode de AnimationTimeline à partir de laquelle il a été créé pour calculer sa valeur de sortie actuelle. AnimationClockFournit le AnimationTimeline avec l’heure locale actuelle, une valeur d’entrée, qui est généralement 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 par à l’aide de la GetValue méthode ou de son accesseur CLR, vous recevez la sortie de son AnimationClock .

Groupes d’horloges

La section précédente a décrit comment il existe différents types d' Clock objets pour différents types de chronologies. L’illustration suivante montre la relation entre le gestionnaire de temps, un ClockGroup , un AnimationClock et 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 minutage
Un groupe d’horloges

Composition

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. 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 la même propriété simultanément, on dit qu’elles font partie d’une chaîne de composition.

Composants du système de minutage
Une chaîne de composition

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

Pour appliquer plusieurs horloges à la même propriété, utilisez lors de l' Compose HandoffBehavior application d’un, d’une Storyboard animation ou d’un AnimationClock .

Graduations et consolidation des événements

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.

Étant donné que ces cycles sont fréquents, beaucoup de choses peuvent se passer entre chaque cycle. Par exemple, un Clock peut être arrêté, démarré et arrêté à nouveau, auquel cas sa CurrentState valeur sera modifiée trois fois. En théorie, l' CurrentStateInvalidated événement peut être déclenché plusieurs fois dans un seul cycle ; Toutefois, le moteur de minutage consolide les événements, afin que l' CurrentStateInvalidated événement puisse être déclenché au maximum une fois par battement. Cela est vrai pour tous les événements de minutage : au plus un événement de chaque type est déclenché pour un Clock objet donné.

Quand un Clock commutateur indique et retourne à son état d’origine entre les battements (par exemple, en passant de Active à Stopped et de retour à Active ), l’événement associé se produit toujours.

Pour plus d'informations sur les événements de minuterie, consultez Vue d'ensemble des événements de minuterie.

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

Une propriété pouvant être animée 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é, le AnimationClock définit la valeur actuelle de la propriété. La récupération de la valeur de la propriété via son accesseur CLR ou la GetValue méthode 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