事件觸發順序先後是
進入頁面:OnNavigatedTo(控制項還沒有被載入) -> Loaded (控制項已經載入完畢)
離開頁面:OnNavigatingFrom(頁面控制項還存在) -> OnNavigatedFrom(頁面控制項還存在)
-> Unloaded(執行完畢後進入第二個頁面)
(1)OnNavigatedTo方法:當頁面變為架構中的活動頁面時調用。
一般重寫OnNavigatedTo事件用來檢查導航請求以及準備要顯示的頁面。比如準備相關的請求載入的資料,一般是使用OnNavigatedTo方法,而不是使用Loaded事件處理函數。最好使用 OnNavigatedTo 方法,因為只在每次頁面成為活動頁面時調用該方法一次。Silverlight 架構在每次將元素添加到視覺化樹狀結構時引發 Loaded 事件,在啟用某一頁面時該事件可能會多次發生。
對於每個請求都調用 OnNavigatedTo 方法,甚至在從緩衝檢索該頁面時也是如此。我們應該在此方法中包括為每個請求必須執行的代碼,而不是把必須執行的代碼放在頁面建構函式中。
(2)Loaded事件:當已構造 FrameworkElement 並將其添加到對象樹中時發生,主要是頁面被載入後觸發這個事件。大部分控制項都有這個事件,在控制項被載入後觸發事件。此事件不路由(而許多 Silverlight 輸入事件都路由)。注意,子控制項先Loaded,然後是父控制項Loaded。
(3)OnNavigatingFrom:剛好在頁面不再是架構中的活動頁面之前調用。
如果需要頁面變成非使用中前執行操作時可以重寫OnNavigatingFrom 方法。比如儲存當前頁面的資料等。
(4)OnNavigatedFrom:當頁面不再是架構中的活動頁面時調用。
如果在頁面變成非使用中時我們需要執行最後的操作,那我們可以重載OnNavigatedFrom操作。比如:更新頁面相關的資料等。
(5)Unloaded:當此對象不再與主對象樹串連時發生。
和Loaded事件類別似, Unloaded 不是 Silverlight 中的路由事件。如果 Silverlight 應用程式由於任何原因關閉,任何對象不會引發 Unloaded事件。與Loaded事件相反,這裡父控制項先Unloaded,然後是子控制項Unloaded。
注意:被設定為Visibility.Collapsed的Visibility不等價於正從對象樹中被卸載,並且不引發對象上的Unloaded。同樣,更改Popup的開啟狀態不會在Popup或任何其子項目上引發Unloaded。