Vue d'ensemble de l'animation et du système 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.
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 segment de temps est un segment de temps et une animation est un type de ce qui produit des valeurs de Timeline 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 Clock la chronologie qui effectue 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 celle Clock qui a été créée pour l’animation qui pilote la sortie d’animation et l’applique aux propriétés.
Il Clock s’agit d’un type spécial d’objet qui gère l’état d’exécution lié au minutage 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, une Clock valeur est créée 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 objet explicitement à l’aide de la CreateClock méthode 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 le fichier contient des Timeline chronologies enfants, il crée Clock également des objets 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 les valeurs de sortie d’une propriété de dépendance. |
MediaTimeline | MediaClock | Traite un fichier multimédia. |
ParallelTimeline | ClockGroup | Groupes et contrôles de ses objets enfants Clock |
Storyboard | ClockGroup | Groupes et contrôles de 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 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 chacune de ces graduations, le gestionnaire de temps calcule l’état de tous les ActiveClock objets dans l’arborescence de minutage.
L’illustration suivante montre la relation entre le gestionnaire de temps et AnimationClockune propriété de dépendance animée.
Animation d’une propriété
Lorsque le gestionnaire de temps est coché, il met à jour l’heure de chaque ActiveClock dans l’application. Clock S’il s’agit d’un AnimationClock, il utilise la GetCurrentValue méthode à AnimationTimeline partir de laquelle il a été créé pour calculer sa valeur de sortie actuelle. Fournit AnimationClock l’heure AnimationTimeline 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 à l’aide de la GetValue méthode ou de son accesseur CLR, vous obtenez la sortie 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.
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.
Une 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.
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 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 indique et revient à son état d’origine entre les graduations (par exemple, la modification de Active vers et de retour à StoppedActive), 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é, 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 GetValue méthode retourne la sortie du AnimationClock moment où la propriété 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
.NET Desktop feedback