Partager via


Vue d’ensemble des animations personnalisées

Cette rubrique explique comment et quand étendre le système d’animation WPF en créant des images clés personnalisées, des classes d’animation ou en utilisant le rappel par image pour le contourner.

Conditions préalables

Pour comprendre cette rubrique, vous devez être familiarisé avec les différents types d’animations fournis par wpF. Pour plus d’informations, consultez la vue d’ensemble des animations De/À/Par, la vue d’ensemble des animationsKey-Frame et la vue d’ensemble des animations de chemin.

Étant donné que les classes d’animation héritent de la Freezable classe, vous devez être familiarisé avec Freezable les objets et comment hériter de Freezable. Pour plus d’informations, consultez la vue d’ensemble des objets freezables.

Extension du système d’animation

Il existe plusieurs façons d’étendre le système d’animation WPF, en fonction du niveau de fonctionnalités intégrées que vous souhaitez utiliser. Il existe trois points d’extensibilité principaux dans le moteur d’animation WPF :

  • Créez un objet de trame de clés personnalisé en hériter de l’une des classes *<Type>*KeyFrame, telles que DoubleKeyFrame. Cette approche utilise la plupart des fonctionnalités intégrées du moteur d’animation WPF.

  • Créez votre propre classe d'animation en héritant de AnimationTimeline ou de l'une des classes *<Type>*AnimationBase.

  • Utilisez le rappel par image pour générer des animations par image. Cette approche contourne complètement l’animation et le système de minutage.

Le tableau suivant décrit certains scénarios d’extension du système d’animation.

Quand vous voulez... Utiliser cette approche
Personnaliser l’interpolation entre les valeurs d’un type qui a un *<Type>*AnimationUsingKeyFrames correspondant Créez un cadre de clé personnalisé. Pour plus d’informations, consultez la section Créer une image clé personnalisée .
Personnalisez plus que l’interpolation entre les valeurs d’un type qui a une *<Type>*Animation correspondante. Créez une classe d’animation personnalisée qui hérite de la classe *<Type>*AnimationBase qui correspond au type que vous souhaitez animer. Pour plus d’informations, consultez la section Créer une classe d’animation personnalisée .
Animer un type qui n’a aucune animation WPF correspondante Utilisez une ObjectAnimationUsingKeyFrames classe ou créez une classe qui hérite de AnimationTimeline. Pour plus d’informations, consultez la section Créer une classe d’animation personnalisée .
Animer plusieurs objets avec des valeurs qui sont calculées à chaque image et qui sont basées sur le dernier ensemble d’interactions d’objets. Utilisez le rappel par trame. Pour plus d’informations, consultez la section Créer un rappel d'utilisation Per-Frame.

Créer un cadre de clé personnalisé

La création d’une classe d’images clés personnalisée est le moyen le plus simple d’étendre le système d’animation. Utilisez cette approche lorsque vous souhaitez utiliser une autre méthode d’interpolation pour une animation de trame clé. Comme décrit dans l' aperçu des animationsKey-Frame, une animation par images clés utilise des principaux objets d’animation pour générer ses valeurs de sortie. Chaque objet frame clé exécute trois fonctions :

  • Spécifie une valeur cible à l’aide de sa Value propriété.

  • Spécifie l’heure à laquelle cette valeur doit être atteinte à l’aide de sa KeyTime propriété.

  • Interpole entre la valeur du frame clé précédent et sa propre valeur en implémentant la méthode InterpolateValueCore.

Instructions d’implémentation

Dérivez de la classe abstraite *<Type>*KeyFrame et implémentez la méthode InterpolateValueCore. La méthode InterpolateValueCore retourne la valeur actuelle du frame clé. Il faut deux paramètres : la valeur de l’image clé précédente et une valeur de progression comprise entre 0 et 1. Une progression de 0 indique que l’image clé vient de démarrer et qu’une valeur de 1 indique que l’image clé vient d’être terminée et doit retourner la valeur spécifiée par sa Value propriété.

Étant donné que les classes *<Type>*KeyFrame héritent de la classe Freezable, vous devez également redéfinir le cœur pour retourner une nouvelle instance de votre classe. Si la classe n’utilise pas les propriétés de dépendance pour stocker ses données ou si elle nécessite une initialisation supplémentaire après la création, vous devrez peut-être remplacer des méthodes supplémentaires ; consultez la vue d’ensemble des objets freezables pour plus d’informations.

Une fois que vous avez créé votre animation *<Type>*KeyFrame personnalisée, vous pouvez l’utiliser avec les *<Type>*AnimationUsingKeyFrames pour ce type.

Créer une classe d’animation personnalisée

La création de votre propre type d’animation vous permet de mieux contrôler la façon dont un objet est animé. Il existe deux façons recommandées de créer votre propre type d’animation : vous pouvez dériver de la AnimationTimeline classe ou de la classe *<Type>*AnimationBase. La dérivation des classes *<Type>*Animation ou *<Type>*AnimationUsingKeyFrames n’est pas recommandée.

Dériver de <Type>AnimationBase

La dérivation d’une classe *<Type>*AnimationBase est le moyen le plus simple de créer un type d’animation. Utilisez cette approche lorsque vous souhaitez créer une animation pour le type qui a déjà une classe *<Type>*AnimationBase correspondante.

Instructions d’implémentation

Dérivez d’une classe *<Type>*Animation et implémentez la méthode GetCurrentValueCore. La méthode GetCurrentValueCore retourne la valeur actuelle de l’animation. Il prend trois paramètres : une valeur de départ suggérée, une valeur de fin suggérée et un AnimationClock, que vous utilisez pour déterminer la progression de l’animation.

Étant donné que les classes *<Type>*AnimationBase héritent de la classe Freezable, vous devez également surcharger la méthode CreateInstanceCore core pour renvoyer une nouvelle instance de votre classe. Si la classe n’utilise pas les propriétés de dépendance pour stocker ses données ou si elle nécessite une initialisation supplémentaire après la création, vous devrez peut-être remplacer des méthodes supplémentaires ; consultez la vue d’ensemble des objets freezables pour plus d’informations.

Pour plus d’informations, consultez la documentation de la méthode GetCurrentValueCore pour la classe *<Type>*AnimationBase pour le type que vous souhaitez animer. Pour obtenir un exemple, consultez l’exemple d’animation personnalisée

Autres approches

Si vous souhaitez simplement changer la manière dont les valeurs d’animation sont interpolées, envisagez de dériver à partir de l'une des classes *<Type>*KeyFrame. Le cadre clé que vous créez peut être utilisé avec les *<Type>*AnimationUsingKeyFrames correspondants fournis par WPF.

Dérivé d'AnimationTimeline

Dérivez de la AnimationTimeline classe lorsque vous souhaitez créer une animation pour un type qui n’a pas déjà d’animation WPF correspondante, ou si vous souhaitez créer une animation qui n’est pas fortement typée.

Instructions d’implémentation

Dérivez de la AnimationTimeline classe et remplacez les membres suivants :

  • CreateInstanceCore : si votre nouvelle classe est concrète, vous devez remplacer CreateInstanceCore pour retourner une nouvelle instance de votre classe.

  • GetCurrentValue : remplacez cette méthode pour retourner la valeur actuelle de votre animation. Il prend trois paramètres : une valeur d’origine par défaut, une valeur de destination par défaut et un AnimationClock. Utilisez l’option AnimationClock pour obtenir l’heure actuelle ou la progression de l’animation. Vous pouvez choisir d’utiliser les valeurs d’origine et de destination par défaut.

  • IsDestinationDefault : remplacez cette propriété pour indiquer si votre animation utilise la valeur de destination par défaut spécifiée par la GetCurrentValue méthode.

  • TargetPropertyType : remplacez cette propriété pour indiquer la Type sortie produite par votre animation.

Si la classe n’utilise pas les propriétés de dépendance pour stocker ses données ou si elle nécessite une initialisation supplémentaire après la création, vous devrez peut-être remplacer des méthodes supplémentaires ; consultez la vue d’ensemble des objets freezables pour plus d’informations.

Le paradigme recommandé (utilisé par les animations WPF) consiste à utiliser deux niveaux d’héritage :

  1. Créez une classe *<Type>*AnimationBase abstraite qui dérive de AnimationTimeline. Cette classe doit remplacer la TargetPropertyType méthode. Il doit également introduire une nouvelle méthode abstraite, GetCurrentValueCore, et surcharger GetCurrentValue, afin de valider les types de la valeur d’origine par défaut et des paramètres de valeur de destination par défaut, puis appeler GetCurrentValueCore.

  2. Créez une autre classe qui hérite de votre nouvelle classe *<Type>*AnimationBase et remplace la CreateInstanceCore méthode, la méthode GetCurrentValueCore que vous avez introduite et la IsDestinationDefault propriété.

Autres approches

Si vous souhaitez animer un type qui n’a pas d’animation From/To/By correspondante ou d’animation d’images clés, envisagez d’utiliser un ObjectAnimationUsingKeyFrames. Étant faiblement typé, un ObjectAnimationUsingKeyFrames peut animer n’importe quel type de valeur. L’inconvénient de cette approche est que ObjectAnimationUsingKeyFrames ne prend en charge que l’interpolation discrète.

Utiliser le rappel Per-Frame

Utilisez cette approche lorsque vous devez contourner complètement le système d’animation WPF. Un scénario pour cette approche est les animations physiques, où à chaque étape d’animation, une nouvelle direction ou une position d’objets animés doit être recomputée en fonction du dernier ensemble d’interactions d’objet.

Instructions d’implémentation

Contrairement aux autres approches décrites dans cette vue d’ensemble, pour utiliser le rappel par image, vous n’avez pas besoin de créer une animation personnalisée ou une classe d’images clés.

Au lieu de cela, vous vous inscrivez à l’événement Rendering de l’objet qui contient les objets que vous souhaitez animer. Cette méthode de gestionnaire d’événements est appelée une fois par image. Chaque fois que WPF marshale les données de rendu persistantes dans l’arborescence visuelle sur l’arborescence de composition, votre méthode de gestionnaire d’événements est appelée.

Dans votre gestionnaire d’événements, effectuez vos calculs nécessaires pour votre effet d’animation et définissez les propriétés des objets que vous souhaitez animer avec ces valeurs.

Pour obtenir l’heure de présentation de l’image courante, l’événement EventArgs associé peut être casté comme RenderingEventArgs, qui fournit une propriété que vous pouvez utiliser pour obtenir l’heure de rendu de l’image courante.

Pour plus d’informations, consultez la Rendering page.

Voir aussi