diff --git a/src/Avalonia.Base/Animation/Animation.cs b/src/Avalonia.Base/Animation/Animation.cs index c5c76f4929..7c03c988f8 100644 --- a/src/Avalonia.Base/Animation/Animation.cs +++ b/src/Avalonia.Base/Animation/Animation.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Linq; using System.Reactive.Disposables; using System.Reactive.Linq; @@ -199,10 +200,14 @@ namespace Avalonia.Animation /// Sets the value of the Animator attached property for a setter. /// /// The animation setter. - public static void SetAnimator(IAnimationSetter setter) - where TAnimator : IAnimator, new() + /// The property animator value. + public static void SetAnimator(IAnimationSetter setter, +#if NET6_0_OR_GREATER + [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicParameterlessConstructor | DynamicallyAccessedMemberTypes.PublicMethods)] +#endif + Type value) { - s_animators[setter] = (typeof(TAnimator), () => new TAnimator()); + s_animators[setter] = (value, () => (IAnimator)Activator.CreateInstance(value)!); } private readonly static List<(Func Condition, Type Animator, Func Factory)> Animators = new() diff --git a/src/Avalonia.Base/Avalonia.Base.csproj b/src/Avalonia.Base/Avalonia.Base.csproj index 15feed388b..d091b9072d 100644 --- a/src/Avalonia.Base/Avalonia.Base.csproj +++ b/src/Avalonia.Base/Avalonia.Base.csproj @@ -6,6 +6,7 @@ True true $(BaseIntermediateOutputPath)\GeneratedFiles + true