diff --git a/demo/Ursa.Demo/Pages/NavMenuDemo.axaml.cs b/demo/Ursa.Demo/Pages/NavMenuDemo.axaml.cs index ec9ec24..aff3e1b 100644 --- a/demo/Ursa.Demo/Pages/NavMenuDemo.axaml.cs +++ b/demo/Ursa.Demo/Pages/NavMenuDemo.axaml.cs @@ -1,17 +1,18 @@ using Avalonia.Controls; using Avalonia.Interactivity; using Ursa.Controls; +using Ursa.Helpers; namespace Ursa.Demo.Pages; public partial class NavMenuDemo : UserControl { - private readonly WHAnimationHelper _animationHelper; + private readonly NavMenuAnimationHelper _animationHelper; public NavMenuDemo() { InitializeComponent(); - _animationHelper = new WHAnimationHelper(menu, NavMenu.IsHorizontalCollapsedProperty); + _animationHelper = new NavMenuAnimationHelper(menu); } protected override void OnLoaded(RoutedEventArgs e) diff --git a/src/Ursa/Helpers/NavMenuAnimationHelper.cs b/src/Ursa/Helpers/NavMenuAnimationHelper.cs new file mode 100644 index 0000000..5848792 --- /dev/null +++ b/src/Ursa/Helpers/NavMenuAnimationHelper.cs @@ -0,0 +1,46 @@ +using Avalonia; +using Avalonia.Animation; +using Avalonia.Animation.Easings; +using Avalonia.Controls; +using Avalonia.Layout; +using Avalonia.Styling; +using Ursa.Controls; + +namespace Ursa.Helpers; + +public class NavMenuAnimationHelper(NavMenu control) : WHAnimationHelper(control, NavMenu.IsHorizontalCollapsedProperty) +{ + protected override Animation CreateAnimation(Size oldValue, Size newValue) + { + if (oldValue.Width > newValue.Width) + { + newValue = newValue.WithWidth(newValue.Width + 20); + } + + return new Animation + { + Duration = TimeSpan.FromMilliseconds(300), + Easing = new CubicEaseInOut(), + FillMode = FillMode.None, + Children = + { + new KeyFrame + { + Cue = new Cue(0.0), + Setters = + { + new Setter(Layoutable.WidthProperty, oldValue.Width) + } + }, + new KeyFrame + { + Cue = new Cue(1.0), + Setters = + { + new Setter(Layoutable.WidthProperty, newValue.Width) + } + } + } + }; + } +} \ No newline at end of file diff --git a/src/Ursa/Controls/NavMenu/WHAnimationHelper.cs b/src/Ursa/Helpers/WHAnimationHelper.cs similarity index 96% rename from src/Ursa/Controls/NavMenu/WHAnimationHelper.cs rename to src/Ursa/Helpers/WHAnimationHelper.cs index 649a8d6..d583b3c 100644 --- a/src/Ursa/Controls/NavMenu/WHAnimationHelper.cs +++ b/src/Ursa/Helpers/WHAnimationHelper.cs @@ -7,7 +7,7 @@ using Avalonia.Styling; using Avalonia.Threading; using Avalonia.VisualTree; -namespace Ursa.Controls; +namespace Ursa.Helpers; public class WHAnimationHelper(Control control, AvaloniaProperty property) { @@ -41,7 +41,6 @@ public class WHAnimationHelper(Control control, AvaloniaProperty property) var oldValue = control.DesiredSize; control.UpdateLayout(); var newValue = control.DesiredSize; - newValue = newValue.WithWidth(newValue.Width + 20); control.InvalidateArrange(); var animation = CreateAnimation(oldValue, newValue); animation.RunAsync(control, _cancellationTokenSource.Token);