昨天群里有位童鞋提出如何在動畫完成事件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 以供參考 :)
