From 6b0ded4fc2866e4c7ef38c702281d1e03a833e5e Mon Sep 17 00:00:00 2001 From: Jumar Macato Date: Tue, 14 May 2019 16:42:03 +0800 Subject: [PATCH] Track old `TransitionInstances` and dispose when its invalid. Fixes #2485 --- src/Avalonia.Animation/Animatable.cs | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/Avalonia.Animation/Animatable.cs b/src/Avalonia.Animation/Animatable.cs index 4b0f76c5d5..445c490b4b 100644 --- a/src/Avalonia.Animation/Animatable.cs +++ b/src/Avalonia.Animation/Animatable.cs @@ -7,7 +7,7 @@ using System.Linq; using System.Reactive.Linq; using Avalonia.Collections; using Avalonia.Data; -using Avalonia.Animation.Animators; +using Avalonia.Animation.Animators; namespace Avalonia.Animation { @@ -36,6 +36,9 @@ namespace Avalonia.Animation private Transitions _transitions; + private Dictionary _previousTransitions + = new Dictionary(); + /// /// Gets or sets the property transitions for the control. /// @@ -58,7 +61,12 @@ namespace Avalonia.Animation if (match != null) { - match.Apply(this, Clock ?? Avalonia.Animation.Clock.GlobalClock, e.OldValue, e.NewValue); + if (_previousTransitions.TryGetValue(e.Property, out var dispose)) + dispose.Dispose(); + + var instance = match.Apply(this, Clock ?? Avalonia.Animation.Clock.GlobalClock, e.OldValue, e.NewValue); + + _previousTransitions[e.Property] = instance; } } }