昨天群里有位童鞋提出如何在动画完成事件Completed里获取到执行该动画的UI对象。动画
WPF里动画的Completed的自己并不会返回执行动画的UI对象,但咱们能够利用附加属性Storyboard.TargetProperty来达到咱们想要的效果。ui
步骤:spa
1 在执行动画前,先附加属性记录对象code
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 以供参考 :)blog