Animation d’éléments XAML avec des animations de composition
Cet article présente de nouvelles propriétés qui vous permettent d’animer un UIElement XAML avec les performances des animations de composition et la facilité de définition des propriétés XAML.
Avant Windows 10, version 1809, vous avez eu 2 choix pour créer des animations dans vos applications UWP :
- utilisez des constructions XAML telles que des animations storyboarded, ou les classes *ThemeTransition et *ThemeAnimation dans l’espace de noms Windows.UI.Xaml.Media.Animation .
- utilisez des animations de composition comme décrit dans Utilisation de la couche visuelle avec XAML.
L’utilisation de la couche visuelle offre de meilleures performances que l’utilisation des constructions XAML. Toutefois, l’utilisation de ElementCompositionPreview pour obtenir l’objet visuel de composition sous-jacent de l’élément, puis l’animation du visuel avec des animations de composition, est plus complexe à utiliser.
À compter de Windows 10, version 1809, vous pouvez animer des propriétés sur un UIElement directement à l’aide d’animations de composition sans avoir à obtenir le visuel de composition sous-jacent.
Remarque
Pour utiliser ces propriétés sur UIElement, votre version cible du projet UWP doit être 1809 ou ultérieure. Pour plus d’informations sur la configuration de la version de votre projet, consultez Applications adaptatives de version.
Exemples
Galerie WinUI 2 | |
---|---|
![]() |
Si l’application Galerie WinUI 2 est installée, cliquez ici pour ouvrir l’application et voir Animation interop en action. |
Les nouvelles propriétés de rendu remplacent les anciennes propriétés de rendu
Ce tableau affiche les propriétés que vous pouvez utiliser pour modifier le rendu d’un UIElement, qui peut également être animé avec une CompositionAnimation.
Propriété | Type | Description |
---|---|---|
Opacity | Double | Degré d’opacité de l’objet |
Traduction | Vector3 | Décaler la position X/Y/Z de l’élément |
TransformMatrix | Matrix4x4 | Matrice de transformation à appliquer à l’élément |
Mise à l’échelle | Vector3 | Mettre à l’échelle l’élément, centré sur CenterPoint |
Rotation | Float | Faire pivoter l’élément autour de RotationAxis et CenterPoint |
RotationAxis | Vector3 | Axe de la rotation |
CenterPoint | Vector3 | Point central de l’échelle et de la rotation |
La valeur de la propriété TransformMatrix est combinée aux propriétés Scale, Rotation et Translation dans l’ordre suivant : TransformMatrix, Scale, Rotation, Translation.
Ces propriétés n’affectent pas la disposition de l’élément. Par conséquent, la modification de ces propriétés n’entraîne pas une nouvelle passe Measure/Arrange.
Ces propriétés ont le même objectif et le même comportement que les propriétés nommées comme celles de la classe Visual de composition (à l’exception de Translation, qui ne se trouve pas sur Visual).
Exemple : Définition de la propriété Scale
Cet exemple montre comment définir la propriété Scale sur un bouton.
<Button Scale="2,2,1" Content="I am a large button" />
var button = new Button();
button.Content = "I am a large button";
button.Scale = new Vector3(2.0f,2.0f,1.0f);
Exclusivité mutuelle entre les propriétés nouvelles et anciennes
Remarque
La propriété Opacity n’applique pas l’exclusivité mutuelle décrite dans cette section. Vous utilisez la même propriété Opacity que vous utilisiez des animations XAML ou de composition.
Les propriétés qui peuvent être animées avec une CompositionAnimation sont des remplacements pour plusieurs propriétés UIElement existantes :
Lorsque vous définissez (ou animez) l’une des nouvelles propriétés, vous ne pouvez pas utiliser les anciennes propriétés. À l’inverse, si vous définissez (ou animez) l’une des anciennes propriétés, vous ne pouvez pas utiliser les nouvelles propriétés.
Vous ne pouvez pas également utiliser les nouvelles propriétés si vous utilisez ElementCompositionPreview pour obtenir et gérer le visuel vous-même à l’aide de ces méthodes :
Important
Si vous tentez de combiner l’utilisation des deux ensembles de propriétés, l’appel d’API échoue et génère un message d’erreur.
Il est possible de passer d’un ensemble de propriétés en les désactivant, mais par souci de simplicité, il n’est pas recommandé. Si la propriété est sauvegardée par une DependencyProperty (par exemple, UIElement.Projection est sauvegardée par UIElement.ProjectionProperty), appelez ClearValue pour la restaurer à son état « inutilisé ». Sinon (par exemple, la propriété Scale), définissez la propriété sur sa valeur par défaut.
Animation des propriétés UIElement avec CompositionAnimation
Vous pouvez animer les propriétés de rendu répertoriées dans la table avec une CompositionAnimation. Ces propriétés peuvent également être référencées par une expressionAnimation.
Utilisez les méthodes StartAnimation et StopAnimation sur UIElement pour animer les propriétés UIElement.
Exemple : Animation de la propriété Scale avec un Vector3KeyFrameAnimation
Cet exemple montre comment animer l’échelle d’un bouton.
var compositor = Window.Current.Compositor;
var animation = compositor.CreateVector3KeyFrameAnimation();
animation.InsertKeyFrame(1.0f, new Vector3(2.0f,2.0f,1.0f));
animation.Duration = TimeSpan.FromSeconds(1);
animation.Target = "Scale";
button.StartAnimation(animation);
Exemple : Animation de la propriété Scale avec une expressionAnimation
Une page comporte deux boutons. Le deuxième bouton s’anime pour être deux fois plus grand (via l’échelle) que le premier bouton.
<Button x:Name="sourceButton" Content="Source"/>
<Button x:Name="destinationButton" Content="Destination"/>
var compositor = Window.Current.Compositor;
var animation = compositor.CreateExpressionAnimation("sourceButton.Scale*2");
animation.SetExpressionReferenceParameter("sourceButton", sourceButton);
animation.Target = "Scale";
destinationButton.StartAnimation(animation);
Rubriques connexes
Windows developer