標籤:style blog color io os 使用 ar strong for
1.頁面間跳轉
GoBack() |
後退一步 |
GoForward() |
前進一步 |
CanGoBack |
判斷是否可以後退,如果沒有之前頁面,調用GoBack()會報錯 |
OnNavigatedTo |
由其他頁面導航到當前頁面後觸發 |
OnNavigatedFrom |
從當前頁面導航到其他頁面後觸發 |
OnNavigatingFrom |
從當前頁面導航到其他頁面前觸發 |
OnBackKeyPress |
使用者按下手機上的後退按鈕時觸發,可以在其事件處理函數中執行e.Cancel =true取消後退 |
2.頁間參數傳遞
Windows Phone在頁面跳轉時進行參數傳遞的方式與Web非常類似。在跳轉的Uri中傳遞參數即可。在目標頁面中擷取參數通過NavigationContext.QueryString["id"]方法,與Asp.Net方式類似,但與Asp.Net不同的是,當沒有傳遞參數時擷取參數程式會拋出異常,Asp.Net拿到的參數為null而不會報異常。在Windows Phone中我們可以通過TryGetValue()來嘗試擷取參數。文法如下:
1 string id = "";2 if (NavigationContext.QueryString.TryGetValue("id", out id))3 textBlock1.Text = id;
3.頁面跳轉資料暫存
當用使用者按Back鍵返回app某個頁面並且app沒有退出時,頁面對象一直存續在手機記憶體中,並沒有銷毀,所以使用者依然可以看到原來所有的資料狀態。使用者從當前其他頁面導航跳轉到當前頁面則不同,雖然頁面地址相同,但此時系統為我們新建立了一個頁面執行個體,之前頁面對象從記憶體中釋放,隨之頁面上得所有資料丟失,但有時我們需要儲存原來原來頁面的資料,比如使用者註冊,使用者可能會跳轉到一個新頁中編輯省市資料等條目比較複雜的資訊,完成跳回註冊首頁,此時我們就需要在頁面跳離註冊頁時暫存現有表單資料。解決方案是,在跳離包含使用者編輯資料的頁面之前現場資料到 Windows Phone為我們提供的臨時儲存區,頁面跳回後從臨時儲存區中取出轉檯資料恢複現場。具體實現代碼如下:
1 //重寫OnNavigatedFrom 2 protected override void OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs e) 3 { 4 phoneAppService.State["myValue"] = textBox1.Text;//記錄現場 5 base.OnNavigatedFrom(e); 6 } 7 8 //重寫OnNavigatedTo 9 protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)10 {11 if (phoneAppService.State.ContainsKey("myValue")) 12 {13 object someObject;14 if (phoneAppService.State.TryGetValue("myValue", out someObject)) 15 textBox1.Text = someObject.ToString();//恢複現場16 }17 base.OnNavigatedTo(e);18 }19
頁面間跳轉要儲存現場資料監聽的導航相關的事件,與邏輯刪除(Tombstonling)處理方式一致,但邏輯刪除監聽的是控制項changed(如,文字框的TextChanged)事件和頁面的Loaded事件。因為我們應對的是使用者點擊Start或者Back的情況,當使用者返回頁面時,觸發Loaded事件,考慮到使用者可能隨時離開本頁,所以我們在使用者修改資訊的同時監聽changed事件將資料同步儲存。由此我們認識到,頁面的載入(Load)和導航(OnNavigateTo)具有類似的功能,當我們來到一個頁面不管是直接載入的頁面還是從超連結跳轉過來的頁面都會觸發OnNavigateTo和Loaded事件。它們之間是有嚴格順序的,首先觸發的是OnNavigateTo事件,然後才觸發Loaded事件。
【16.Windows Phone】16.3多頁面程式