Use this reference to move from basic hover polish to motion architecture that feels intentional.
Primary APIs:
Transitions, DoubleTransition, TransformOperationsTransition, BrushTransitionAnimation, KeyFrame, CueTransitioningContentControlIPageTransition, CrossFade, PageSlide, CompositePageTransitionElementComposition, CompositorExpressionAnimation, ImplicitAnimationCollectionCompositor.CreateVector3KeyFrameAnimation(), Compositor.CreateScalarKeyFrameAnimation()Motion should communicate one of four things:
Practical timing guidance:
120-180ms,160-220ms,180-260ms.Reduce motion when:
Use transitions for simple state changes and page transitions for view swaps.
<Border xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Classes="interactive-card"
Opacity="0.96"
RenderTransform="translateY(0px)">
<Border.Transitions>
<Transitions>
<TransformOperationsTransition Property="RenderTransform" Duration="0:0:0.16" />
<DoubleTransition Property="Opacity" Duration="0:0:0.16" />
</Transitions>
</Border.Transitions>
</Border>
<CompositePageTransition xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Key="ShellPageTransition">
<CompositePageTransition.PageTransitions>
<PageSlide Duration="0:0:0.2" Orientation="Horizontal" />
<CrossFade Duration="0:0:0.2" />
</CompositePageTransition.PageTransitions>
</CompositePageTransition>
<TransitioningContentControl PageTransition="{StaticResource ShellPageTransition}"
Content="{CompiledBinding CurrentPage}" />
Use composition when you need smoother, higher-frequency, or shell-level motion with less UI-thread churn.
using System;
using System.Numerics;
using Avalonia.Rendering.Composition;
var visual = ElementComposition.GetElementVisual(CardHost)!;
var compositor = visual.Compositor;
var slide = compositor.CreateVector3KeyFrameAnimation();
slide.InsertKeyFrame(0f, new Vector3(0, 8, 0));
slide.InsertKeyFrame(1f, new Vector3(0, 0, 0));
slide.Duration = TimeSpan.FromMilliseconds(180);
var fade = compositor.CreateScalarKeyFrameAnimation();
fade.InsertKeyFrame(0f, 0.88f);
fade.InsertKeyFrame(1f, 1f);
fade.Duration = TimeSpan.FromMilliseconds(180);
visual.StartAnimation("Offset", slide);
visual.StartAnimation("Opacity", fade);
var center = compositor.CreateExpressionAnimation(
"Vector3(this.Target.Size.X * 0.5, this.Target.Size.Y * 0.5, 1)");
visual.StartAnimation("CenterPoint", center);
Use composition for:
Use transitions when:
Use keyframe Animation when:
Use composition when:
Do:
Do not:
TransitioningContentControl API: api-docs.avaloniaui.net/docs/T_Avalonia_Controls_TransitioningContentControlCompositePageTransition API: api-docs.avaloniaui.net/docs/T_Avalonia_Animation_CompositePageTransitionCompositor API: api-docs.avaloniaui.net/docs/T_Avalonia_Rendering_Composition_CompositorElementComposition API: api-docs.avaloniaui.net/docs/T_Avalonia_Rendering_Composition_ElementCompositionExpressionAnimation API: api-docs.avaloniaui.net/docs/T_Avalonia_Rendering_Composition_Animations_ExpressionAnimationImplicitAnimationCollection API: api-docs.avaloniaui.net/docs/T_Avalonia_Rendering_Composition_Animations_ImplicitAnimationCollection