Animieren von XAML-Elementen mit Kompositionsanimationen
In diesem Artikel werden neue Eigenschaften vorgestellt, mit denen Sie ein XAML-UIElement mit der Leistung von Kompositionsanimationen und der einfachen Einstellung von XAML-Eigenschaften animieren können.
Vor Windows 10, Version 1809 hatten Sie zwei Optionen zum Erstellen von Animationen in Ihren UWP-Apps:
- verwenden Sie XAML-Konstrukte wie Storyboardanimationen oder die Klassen *ThemeTransition und *ThemeAnimation im Windows.UI.Xaml.Media.Animation-Namespace .
- verwenden Sie Kompositionsanimationen, wie unter Verwenden der visuellen Ebene mit XAML beschrieben.
Die Verwendung der visuellen Ebene bietet eine bessere Leistung als die Verwendung der XAML-Konstrukte. Die Verwendung von ElementCompositionPreview zum Abrufen des dem Element zugrunde liegenden visuellen Kompositionsobjekts und anschließendes Animieren des Visuals mit Kompositionsanimationen ist jedoch komplexer.
Ab Windows 10, Version 1809 können Sie Eigenschaften für ein UIElement direkt mithilfe von Kompositionsanimationen animieren, ohne das zugrunde liegende Kompositionsvisual abrufen zu müssen.
Hinweis
Um diese Eigenschaften auf UIElement verwenden zu können, muss die Zielversion Ihres UWP-Projekts 1809 oder höher sein. Weitere Informationen zum Konfigurieren ihrer Projektversion finden Sie unter Versionsadaptive Apps.
Beispiele
WinUI 2-Katalog | |
---|---|
Wenn Sie die WinUI 2-Katalog-App installiert haben, klicken Sie hier, um die App zu öffnen und animation interop in Aktion zu sehen. |
Neue Renderingeigenschaften ersetzen alte Renderingeigenschaften
Diese Tabelle zeigt die Eigenschaften, die Sie zum Ändern des Renderings eines UIElement verwenden können, das auch mit einer CompositionAnimation animiert werden kann.
Eigenschaft | Typ | BESCHREIBUNG |
---|---|---|
Deckkraft | Double | Der Grad der Deckkraft des Objekts |
Übersetzung | Vector3 | Verschieben der X/Y/Z-Position des Elements |
TransformMatrix | Matrix4x4 | Die Transformationsmatrix, die auf das Element angewendet werden soll |
Skalieren | Vector3 | Skalieren des Elements, zentriert auf dem CenterPoint |
Drehung | Float | Drehen des Elements um RotationAxis und CenterPoint |
RotationAxis | Vector3 | Die Drehachse |
CenterPoint | Vector3 | Der Mittelpunkt der Skalierung und Drehung |
Der Wert der TransformMatrix-Eigenschaft wird mit den Eigenschaften Scale, Rotation und Translation in der folgenden Reihenfolge kombiniert: TransformMatrix, Scale, Rotation, Translation.
Diese Eigenschaften wirken sich nicht auf das Layout des Elements aus, sodass das Ändern dieser Eigenschaften keinen neuenMeasure-Anordnungsdurchlauf/ verursacht.
Diese Eigenschaften haben den gleichen Zweck und dasselbe Verhalten wie die eigenschaften mit ähnlichen Namen in der Visual-Klasse der Komposition (mit Ausnahme von Translation, die nicht in Visual vorhanden ist).
Beispiel: Festlegen der Scale-Eigenschaft
In diesem Beispiel wird gezeigt, wie die Scale-Eigenschaft für eine Schaltfläche festgelegt wird.
<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);
Gegenseitige Exklusivität zwischen neuen und alten Eigenschaften
Hinweis
Die Opacity-Eigenschaft erzwingt nicht die in diesem Abschnitt beschriebene gegenseitige Exklusivität. Sie verwenden dieselbe Deckkrafteigenschaft, unabhängig davon, ob Sie XAML- oder Kompositionsanimationen verwenden.
Die Eigenschaften, die mit einer CompositionAnimation animiert werden können, ersetzen mehrere vorhandene UIElement-Eigenschaften:
Wenn Sie eine der neuen Eigenschaften festlegen (oder animieren), können Sie die alten Eigenschaften nicht verwenden. Wenn Sie dagegen eine der alten Eigenschaften festlegen (oder animieren), können Sie die neuen Eigenschaften nicht verwenden.
Sie können die neuen Eigenschaften auch nicht verwenden, wenn Sie ElementCompositionPreview verwenden, um das Visual mithilfe der folgenden Methoden abzurufen und zu verwalten:
Wichtig
Der Versuch, die Verwendung der beiden Eigenschaftensätze zu kombinieren, führt dazu, dass der API-Aufruf fehlschlägt und eine Fehlermeldung erzeugt.
Es ist möglich, von einer Gruppe von Eigenschaften zu wechseln, indem Sie sie löschen, obwohl es der Einfachheit halber nicht empfohlen wird. Wenn die Eigenschaft durch eine DependencyProperty-Eigenschaft unterstützt wird (z. B. UIElement.Projection wird von UIElement.ProjectionProperty unterstützt), rufen Sie ClearValue auf, um den Zustand "nicht verwendet" wiederherzustellen. Andernfalls (z. B. die Scale-Eigenschaft), legen Sie die Eigenschaft auf ihren Standardwert fest.
Animieren von UIElement-Eigenschaften mit CompositionAnimation
Sie können die in der Tabelle aufgeführten Renderingeigenschaften mit einer CompositionAnimation animieren. Auf diese Eigenschaften kann auch durch eine ExpressionAnimation verwiesen werden.
Verwenden Sie die Methoden StartAnimation und StopAnimation auf UIElement, um die UIElement-Eigenschaften zu animieren.
Beispiel: Animieren der Scale-Eigenschaft mit einer Vector3KeyFrameAnimation
In diesem Beispiel wird gezeigt, wie Sie die Skalierung einer Schaltfläche animieren.
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);
Beispiel: Animieren der Scale-Eigenschaft mit einer ExpressionAnimation
Eine Seite verfügt über zwei Schaltflächen. Die zweite Schaltfläche animiert, doppelt so groß (über Skalierung) wie die erste Schaltfläche zu sein.
<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);
Zugehörige Themen
Windows developer
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für