昨天群里有位童鞋提出如何在动画完成事件Completed里获取到执行该动画的UI对象。
WPF里动画的Completed的本身并不会返回执行动画的UI对象,但我们可以利用附加属性Storyboard.TargetProperty来达到我们想要的效果。
步骤:
1 在执行动画前,先附加属性记录对象
DoubleAnimation ani = new DoubleAnimation(); ani.From = start; ani.To = end; ani.Duration = new Duration(TimeSpan.FromSeconds(0.25)); ani.Completed += ani_Completed; /* !!! 附加属性Storyboard.Target,用于指定执行动画的UI对象 !!! */ Storyboard.SetTarget(ani, uiElement); /* 启动动画 */ uiElement.BeginAnimation(Canvas.LeftProperty, ani);
2 在动画的Completed事件方法里取回
if (sender is AnimationClock) { AnimationTimeline timeline = (sender as AnimationClock).Timeline; /* !!! 通过附加属性把UI对象取回 !!! */ object uiElement = Storyboard.GetTarget(timeline); }
附带一个 Demo 以供参考 :)