一個朋友問我一個問題,他問我說為什麼有的網路上面範例..
會把初始化的東西有的寫在Ctor ,但是有的寫在 OnNavigatedTo
這是為什麼呢?!
其實這邊有詳細的答案 : http://create.msdn.com/en-US/education/quickstarts/Running_your_App_in_the_Background_(Tombstoning)
但是我依然做一個小範例就可以馬上懂這用途..
首先 在程式端是這樣寫的…
public TestPage()
{
MessageBox.Show("Ctor");
InitializeComponent();
}
protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
MessageBox.Show("OnNavigatedTo");
base.OnNavigatedFrom(e);
}
protected override void OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs e)
{
MessageBox.Show("OnNavigatedFrom");
base.OnNavigatedFrom(e);
}
在程式跑起Ctor的時候我讓它 跳出 "Ctor" 如果 OnNavigatedTo 被觸發時候就會跳出 "OnNavigatedTo"
所以當程式一開始被執行的時候
會先是出現..
之後出現..
不就先後順序不同… 那差在哪裡呢?!
重點就在於如果你按下搜尋紐,或是把螢幕鎖起來,之後再打開。
程式就只會跑..
所以為什麼很多範例,反而會把很多初始化的東西 寫在 OnNavigatedTo 而並非寫在Ctor ..
尤其像是相機範例…等…他必須要在即使你會來後相機狀態還是打開的…
因為遇到很多時候,看起來似乎一切正常,但是程式被中斷回來後,卻都不太正常的原因..
還有墓碑機制(tombstoning )真的一定要弄清楚…不然真的用多了Page Navigation 在交錯的交叉組合下..
程式一大就會開始物件錯亂..Binding Null …
這觀念很簡單,但是之前被這東西搞到…Orz..