Use this reference to turn Fluent motion guidance into concrete Avalonia motion and composition patterns.
Primary APIs:
Transitions, TransformOperationsTransition, DoubleTransition, BoxShadowsTransitionTransitioningContentControlCrossFade, PageSlide, CompositePageTransitionElementComposition, CompositorExpressionAnimation, ImplicitAnimationCollectionCompositor.CreateVector3KeyFrameAnimation(), Compositor.CreateScalarKeyFrameAnimation()ExperimentalAcrylicBorderFluent motion should be:
Use motion to:
Use less motion when:
<Border xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Classes="fluent-command-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" />
<BoxShadowsTransition Property="BoxShadow" 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="FluentShellTransition">
<CompositePageTransition.PageTransitions>
<CrossFade Duration="0:0:0.18" />
<PageSlide Duration="0:0:0.18" Orientation="Horizontal" />
</CompositePageTransition.PageTransitions>
</CompositePageTransition>
<TransitioningContentControl PageTransition="{StaticResource FluentShellTransition}"
Content="{CompiledBinding CurrentView}" />
Guidance:
using System;
using System.Numerics;
using Avalonia.Rendering.Composition;
var visual = ElementComposition.GetElementVisual(CommandSurface)!;
var compositor = visual.Compositor;
var scale = compositor.CreateVector3KeyFrameAnimation();
scale.InsertKeyFrame(0f, new Vector3(0.98f, 0.98f, 1f));
scale.InsertKeyFrame(1f, new Vector3(1f, 1f, 1f));
scale.Duration = TimeSpan.FromMilliseconds(160);
var fade = compositor.CreateScalarKeyFrameAnimation();
fade.InsertKeyFrame(0f, 0.9f);
fade.InsertKeyFrame(1f, 1f);
fade.Duration = TimeSpan.FromMilliseconds(160);
visual.StartAnimation("Scale", scale);
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:
Depth rules:
Practical guidance:
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_ExpressionAnimationCreateVector3KeyFrameAnimation API: api-docs.avaloniaui.net/docs/M_Avalonia_Rendering_Composition_Compositor_CreateVector3KeyFrameAnimationCreateScalarKeyFrameAnimation API: api-docs.avaloniaui.net/docs/M_Avalonia_Rendering_Composition_Compositor_CreateScalarKeyFrameAnimation