From a73afbb3c293d9a2a1007ddcd3ab10ad3ca87716 Mon Sep 17 00:00:00 2001 From: chinboy Date: Tue, 11 Feb 2025 15:07:33 +0800 Subject: [PATCH] Add IAnimationAwareControl --- src/AtomUI.Theme/IAnimationAwareControl.cs | 10 +++++++ .../Utils/AnimationAwareControlExtensions.cs | 26 +++++++++++++++++++ 2 files changed, 36 insertions(+) create mode 100644 src/AtomUI.Theme/IAnimationAwareControl.cs create mode 100644 src/AtomUI.Theme/Utils/AnimationAwareControlExtensions.cs 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