2011-03-24 72 views
7

是否有快速的方法來確定在WPF控件中是否有動畫正在處理中。WPF動畫:檢測是否有任何動畫正在處理?

我有一個樹狀圖,我正在爲樹節點的擴展製作動畫,並且我希望等到所有這些動畫都完成之後再將焦點項滾動到視圖中。我不想單獨追蹤所有故事板的進度。

理想的情況下我的僞代碼將是這個樣子:

myTreeView.ExpandAll(); // I have written this part 

while (myTreeView.IsAnimating()) // I need the 'IsAnimating' property or extension method 
{ 
    // wait 
} 

selectedTreeviewItem.BringIntoView(); // I have written this too. 
+1

您是否嘗試過StoryBoard「Completed」事件? – codymanix 2011-03-24 17:55:02

+0

由於有多個故事板動畫(每個樹形視圖項目正在擴展一個),所以我不知道我會在最後一個完成時知道。 – 2011-03-24 19:06:46

+0

因此,只需在故事板開始事件中增加一個計數器,並在完成的事件中減少計數器,如果計數器在減少後爲零,則所有動畫都完成。 – 2011-03-24 20:12:38

回答

0

爲什麼不能用故事板的completed event?您將不得不使用事件或其他線程,否則您將使用while語句阻止UI線程,並且不會播放動畫。

+1

這就是我想要避免的,因爲我同時觸發1和x動畫之間的任何位置......但是,這是我正在考慮的一種後備選項。 – 2011-03-25 04:26:27

+0

你的答案基本上就是這樣。我所缺少的是在myTreeView的靜態構造函數中使用EventManager.RegisterClassHandler(...,Storyboard.CompletedEvent,...),以便我可以觀看所有動畫完成。 – 2011-03-28 16:19:59

+0

如果動畫是循環播放呢?然後這不起作用。 – ProgrammerAtWork 2012-08-31 09:34:07