2011-11-16 20 views
2

我有一個簡單的Silverlight導航應用程序。ContentFrame.Navigate - 故事板沒有顯示在Page_Load中

當頁面在內容框架上導航時,我需要啓動一個Storyboard。

起初一切似乎都很好。但是現在我需要在頁面加載時(即顯示故事板之前)進行一些處理(大約需要3秒)。

現在我沒有看到我的Storyboard動畫了。即使在我的數據加載後啓動了Storyboard。

我可以使用的Thread.Sleep喜歡它做同樣的事情模仿我的問題:

private void Page_Loaded(object sender, RoutedEventArgs e) 
{ 
    System.Threading.Thread.Sleep(3000); 
    Storyboard1_Test.Begin(); 
} 
+0

你可以提供你的頁面和Storyboard的Xaml,或者是一個重複你的問題的最小例子嗎? –

回答

2

從觸發事件處理程序用戶界面的變化有時有這樣的問題。通常使用Dispatcher.BeginInvoke方法解決它。

所以只是嘗試從Dispatcher.BeginInvoke

一些代碼共進午餐Storyboard1_Test.Begin();(希望你不介意我使用VB.NET):

Dispatcher.BeginInvoke(Sub() 
         Storyboard1_Test.Begin() 
         End Sub) 

通過使用dispatcher.BeginInvoke您驗證當線程可用時,作業在UI線程上被執行。

+0

很酷,有效。但我真的很喜歡更多的解釋,爲什麼它的工作是這樣的......我覺得很困惑:/ – danbord

+0

@danbord:我相信通過使用dispatcher.BeginInvoke,你可以驗證這個工作是在UI線程上執行的時候該線程可用。由於使用UI事件處理程序也在UI線程上執行,因此可能無法執行其他UI更改。 所以調度員只是將它排隊。 – MichaelS