Я пытаюсь анимировать свойство DependencyProperty от значения до целевого значения (в коде), и когда анимация заканчивается ( или отменяется ), задайте для свойства final . Конечным значением будет либо значение «Кому», если анимация заканчивается, либо вычисленное значение current (по анимации), когда анимация отменяется.
По умолчанию анимация не имеет такого поведения, и анимация не меняет фактическое значение, даже если оно завершено.
Неудачная попытка
Некоторое время назад я написал этот вспомогательный метод для достижения упомянутого поведения:
static void AnimateWithAutoRemoveAnimationAndSetFinalValue(IAnimatable element,
DependencyProperty property,
AnimationTimeline animation)
{
var obj = element as DependencyObject;
if (obj == null)
throw new ArgumentException("element must be of type DependencyObject");
EventHandler handler = null;
handler = (sender, e) =>
{
var finalValue = obj.GetValue(property);
//remove the animation
element.BeginAnimation(property, null);
//reset the final value
obj.SetValue(property, finalValue);
animation.Completed -= handler;
};
animation.Completed += handler;
element.BeginAnimation(property, animation);
}
К сожалению, событие Completed, похоже, не срабатывает, если анимация удалена кем-то, вызывающим BeginAnimation (свойство, null ), и поэтому я не могу правильно установить окончательное значение при отмене анимации. Что еще хуже, я не могу удалить обработчик событий ...
Кто-нибудь знает, как это сделать чистым способом?