diff --git a/src/AtomUI.Theme/IAnimationAwareControl.cs b/src/AtomUI.Theme/IAnimationAwareControl.cs new file mode 100644 index 000000000..97d1e18c7 --- /dev/null +++ b/src/AtomUI.Theme/IAnimationAwareControl.cs @@ -0,0 +1,10 @@ +using Avalonia.Controls; + +namespace AtomUI.Controls; + +public interface IAnimationAwareControl +{ + bool IsMotionEnabled { get; set; } + bool IsWaveAnimationEnabled { get; set; } + Control PropertyBindTarget { get; } +} \ No newline at end of file diff --git a/src/AtomUI.Theme/Utils/AnimationAwareControlExtensions.cs b/src/AtomUI.Theme/Utils/AnimationAwareControlExtensions.cs new file mode 100644 index 000000000..d7d92b8b1 --- /dev/null +++ b/src/AtomUI.Theme/Utils/AnimationAwareControlExtensions.cs @@ -0,0 +1,26 @@ +using AtomUI.Controls; +using AtomUI.Theme.Data; +using AtomUI.Theme.Styling; +using Avalonia; +using Avalonia.Controls; +using Avalonia.LogicalTree; + +namespace AtomUI.Theme.Utils; + +public static class AnimationAwareControlExtensions +{ + public static void BindAnimationProperties(this IAnimationAwareControl animationAwareControl, + AvaloniaProperty isMotionEnabledProperty, + AvaloniaProperty isWaveAnimationEnabledProperty) + { + var bindTarget = animationAwareControl.PropertyBindTarget; + bindTarget.AttachedToLogicalTree += (object? sender, LogicalTreeAttachmentEventArgs args) => + { + if (sender is Control control) + { + TokenResourceBinder.CreateTokenBinding(control, isMotionEnabledProperty, SharedTokenKey.EnableMotion); + TokenResourceBinder.CreateTokenBinding(control, isWaveAnimationEnabledProperty, SharedTokenKey.EnableWaveAnimation); + } + }; + } +} \ No newline at end of file