2011-11-03 108 views
0

如何強制動畫在繼續執行代碼之前等待其整個呈現?動畫完成事件在完全呈現之前提出

我有一個簡單的動畫,顯示一個很重的網格加載面板,我想這需要一些時間使面板呈現淡入淡出效果,不幸完成的事件在動畫顯示之前引發並且代碼保留開始並啓動一個數據進程,該進程閒置幾秒鐘(正確)應用程序。這應該在面板在屏幕上有效呈現後開始!

回答

0

這個動畫是用LayoutTransform還是RenderTransform完成的?

如果LayoutTransform那麼我覺得在動畫完成的事件中處理了LayoutUpdated事件的相關視覺。所以可能當視覺效果實際上首先對動畫結束後的佈局通過做出響應時,它將是您的代碼啓動新過程的正確位置。在該過程開始解除相同視覺的layoutupdated事件之後。

很遺憾,對於RenderTransformCompositionTarget.Rendering之外沒有這樣的事件。您可以嘗試在動畫完成事件中明確處理此事件。此外,在動畫完成後處理渲染事件時,請啓動您的過程並解除渲染事件。如果該事件未被摘下,該事件可能會使您的應用程序變慢。

讓我知道你是否需要任何幫助。

0

您可以調用一個空的低prioratiy行動:

Dispatcher.CurrentDispatcher.Invoke(() => { }, DispatcherPriority.Background); 

阻止代碼執行,直到優先級比DispatcherPriority.Background更高的所有動作都被處理。因此,您可以確保您的動畫代碼已被處理,然後其他阻止代碼將以更高的優先級被執行(並且動畫邏輯保留在調度程序隊列中)。

相關問題