fix:Fix the issue where SizeAnimationHelper.EnableAnimation is not properly loaded when used via the styling system.
This commit is contained in:
@@ -1,4 +1,6 @@
|
|||||||
using Avalonia;
|
using System.Runtime.CompilerServices;
|
||||||
|
using System.Runtime.InteropServices.ComTypes;
|
||||||
|
using Avalonia;
|
||||||
using Avalonia.Animation;
|
using Avalonia.Animation;
|
||||||
using Avalonia.Animation.Easings;
|
using Avalonia.Animation.Easings;
|
||||||
using Avalonia.Controls;
|
using Avalonia.Controls;
|
||||||
@@ -8,7 +10,8 @@ using Avalonia.Styling;
|
|||||||
|
|
||||||
namespace Ursa.Helpers;
|
namespace Ursa.Helpers;
|
||||||
|
|
||||||
public delegate Animation SizeAnimationHelperAnimationGeneratorDelegate(Control animationTargetControl, Size oldDesiredSize,
|
public delegate Animation SizeAnimationHelperAnimationGeneratorDelegate(Control animationTargetControl,
|
||||||
|
Size oldDesiredSize,
|
||||||
Size newDesiredSize);
|
Size newDesiredSize);
|
||||||
|
|
||||||
public class SizeAnimationHelper : AvaloniaObject
|
public class SizeAnimationHelper : AvaloniaObject
|
||||||
@@ -28,6 +31,11 @@ public class SizeAnimationHelper : AvaloniaObject
|
|||||||
public static readonly AttachedProperty<bool> EnableWHAnimationProperty =
|
public static readonly AttachedProperty<bool> EnableWHAnimationProperty =
|
||||||
AvaloniaProperty.RegisterAttached<SizeAnimationHelper, Control, bool>("EnableWHAnimation");
|
AvaloniaProperty.RegisterAttached<SizeAnimationHelper, Control, bool>("EnableWHAnimation");
|
||||||
|
|
||||||
|
static SizeAnimationHelper()
|
||||||
|
{
|
||||||
|
EnableWHAnimationProperty.Changed.AddClassHandler<Control>(OnPropertyChanged);
|
||||||
|
}
|
||||||
|
|
||||||
private static Animation CreateAnimationPropertyDefaultValue(Control animationTargetControl, Size oldDesiredSize,
|
private static Animation CreateAnimationPropertyDefaultValue(Control animationTargetControl, Size oldDesiredSize,
|
||||||
Size newDesiredSize)
|
Size newDesiredSize)
|
||||||
{
|
{
|
||||||
@@ -93,8 +101,18 @@ public class SizeAnimationHelper : AvaloniaObject
|
|||||||
|
|
||||||
public static void SetEnableWHAnimation(Control obj, bool value)
|
public static void SetEnableWHAnimation(Control obj, bool value)
|
||||||
{
|
{
|
||||||
if (value == obj.GetValue(EnableWHAnimationProperty)) return;
|
|
||||||
obj.SetValue(EnableWHAnimationProperty, value);
|
obj.SetValue(EnableWHAnimationProperty, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static bool GetEnableWHAnimation(Control obj)
|
||||||
|
{
|
||||||
|
return obj.GetValue(EnableWHAnimationProperty);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void OnPropertyChanged(Control obj, AvaloniaPropertyChangedEventArgs change)
|
||||||
|
{
|
||||||
|
if (change.Property != EnableWHAnimationProperty) return;
|
||||||
|
_ = change.NewValue is bool value ? value : throw new ArgumentNullException();
|
||||||
if (value)
|
if (value)
|
||||||
{
|
{
|
||||||
var triggerProperty = GetTriggerAvaloniaProperty(obj);
|
var triggerProperty = GetTriggerAvaloniaProperty(obj);
|
||||||
@@ -111,7 +129,14 @@ public class SizeAnimationHelper : AvaloniaObject
|
|||||||
"SizeAnimationHelper does not support Visual.BoundsProperty or Layoutable.DesiredSizeProperty as trigger property.");
|
"SizeAnimationHelper does not support Visual.BoundsProperty or Layoutable.DesiredSizeProperty as trigger property.");
|
||||||
}
|
}
|
||||||
|
|
||||||
obj.Loaded += ObjOnLoaded;
|
if (obj.IsLoaded)
|
||||||
|
{
|
||||||
|
obj.PropertyChanged += AnimationTargetOnPropertyChanged;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
obj.Loaded += ObjOnLoaded;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -126,11 +151,6 @@ public class SizeAnimationHelper : AvaloniaObject
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static bool GetEnableWHAnimation(Control obj)
|
|
||||||
{
|
|
||||||
return obj.GetValue(EnableWHAnimationProperty);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void AnimationTargetOnPropertyChanged(object? sender, AvaloniaPropertyChangedEventArgs e)
|
private static void AnimationTargetOnPropertyChanged(object? sender, AvaloniaPropertyChangedEventArgs e)
|
||||||
{
|
{
|
||||||
if (sender is not Control control ||
|
if (sender is not Control control ||
|
||||||
|
|||||||
Reference in New Issue
Block a user