Browse Source

Animatable: handle transitions subscription when contol is added or removed from visual tree

pull/10173/head
Dmitry Zhelnin 4 years ago
parent
commit
936d4c3448
  1. 14
      src/Avalonia.Base/Animation/Animatable.cs

14
src/Avalonia.Base/Animation/Animatable.cs

@ -27,6 +27,7 @@ namespace Avalonia.Animation
AvaloniaProperty.Register<Animatable, Transitions?>(nameof(Transitions));
private bool _transitionsEnabled = true;
private bool _isSubscribedToTransitionsCollection = false;
private Dictionary<ITransition, TransitionState>? _transitionState;
/// <summary>
@ -62,6 +63,11 @@ namespace Avalonia.Animation
if (Transitions is object)
{
if (!_isSubscribedToTransitionsCollection)
{
_isSubscribedToTransitionsCollection = true;
Transitions.CollectionChanged += TransitionsCollectionChanged;
}
AddTransitions(Transitions);
}
}
@ -72,7 +78,7 @@ namespace Avalonia.Animation
/// </summary>
/// <remarks>
/// This method should not be called from user code, it will be called automatically by the framework
/// when a control is added to the visual tree.
/// when a control is removed from the visual tree.
/// </remarks>
protected void DisableTransitions()
{
@ -82,6 +88,11 @@ namespace Avalonia.Animation
if (Transitions is object)
{
if (_isSubscribedToTransitionsCollection)
{
_isSubscribedToTransitionsCollection = false;
Transitions.CollectionChanged -= TransitionsCollectionChanged;
}
RemoveTransitions(Transitions);
}
}
@ -110,6 +121,7 @@ namespace Avalonia.Animation
}
newTransitions.CollectionChanged += TransitionsCollectionChanged;
_isSubscribedToTransitionsCollection = true;
AddTransitions(toAdd);
}

Loading…
Cancel
Save