我正在我們的應用程序的特定網格中加載用戶控件,並且我正在爲控件的Loaded
事件處理程序中的加載用戶控件添加動畫。加載後和顯示用戶控制之前是否有任何事件?
一些用戶控件是輕量級的,其中一些用戶控件在加載之前需要大量計算。問題在於,當我向重度用戶控件添加1秒動畫時,顯示控件時如此忍受,以至於無法看到動畫!
是否有任何其他事件,我可以將我的動畫添加到用戶控件,以便沉重的和輕的用相同的動畫顯示?
在顯示控件之前我需要一個事件。不幸的是,OnLoaded
似乎並不適合我。
我正在我們的應用程序的特定網格中加載用戶控件,並且我正在爲控件的Loaded
事件處理程序中的加載用戶控件添加動畫。加載後和顯示用戶控制之前是否有任何事件?
一些用戶控件是輕量級的,其中一些用戶控件在加載之前需要大量計算。問題在於,當我向重度用戶控件添加1秒動畫時,顯示控件時如此忍受,以至於無法看到動畫!
是否有任何其他事件,我可以將我的動畫添加到用戶控件,以便沉重的和輕的用相同的動畫顯示?
在顯示控件之前我需要一個事件。不幸的是,OnLoaded
似乎並不適合我。
答案被給予Storyboard.Begin較低的優先級。
我發現它從這樣的回答:https://stackoverflow.com/a/4708172/970420
因此,我們必須爲開頭的動畫驗證碼:
void BeginStoryboardAction(Storyboard sb)
{
sb.Begin();
}
,我們應該這樣稱呼它:
Dispatcher.BeginInvoke(new Action<Storyboard>(BeginStoryboardAction), DispatcherPriority.ContextIdle, sb);
sb是Storyboard的一個實例,它有一些動畫。
[編輯]: 另一個短的方式:
Dispatcher.BeginInvoke(new Action<Storyboard>(delegate (Storyboard stb){stb.Begin();}), DispatcherPriority.ContextIdle, sb);
首次打開窗口時,只有在激活事件引發後纔會引發Loaded和ContentRendered事件。考慮到這一點,當ContentRendered被引發時,可以有效地將窗口視爲打開。
對於那些誰正在尋找執行創建組件之後代碼的通用方法,但它們呈現之前LayoutUpdated
事件幫助。這應該在Windows內部以及用戶或自定義控件內部工作。
非常感謝Aksel的關注,但我測試了容器窗口的ContentRendered,它在啓動時只被解僱了一次,並且再也不會被解僱。不過,我得到的解決方案:)該解決方案駐留在這裏:http://stackoverflow.com/a/4708172/970420作爲裏克說我們應該安排故事板開始,以便它具有最低優先級。所以我加了'void BeginStoryboardAction(){sb.Begin(); }'並通過這種方式推遲調用它:'Dispatcher.BeginInvoke(新的Action(BeginStoryboardAction),DispatcherPriority.ContextIdle);'它就像一個魅力,即使是重載加載用戶控件:) – 2012-03-13 10:25:08