【16.Windows Phone】16.3多頁面程式

來源:互聯網
上載者:User

標籤:style   blog   color   io   os   使用   ar   strong   for   

1.頁面間跳轉

  • NavigateUri(頁面定向跳轉) HyperlinkButton控制項可以簡單的實現頁面之間的相互跳轉,只需要指定Uri,就可以在點擊後跳轉到相應的頁面。類似於Web中的超連結。Uri的書寫格式與前面的一致(Uri格式易錯)。用於在Xaml頁面之間做定向跳轉。 Uri格式執行個體:/NavigatingBetweenPages;component/OtherPages/Page1.xaml NavigatingBeteenPage是項目名稱,component/後面的是要跳轉到的頁相對於項目的路徑。注意最前面的“/”不可以省略。
  • 我們在寫Uri的時候可以省略相對項目根目錄之前的字元,功能相同。例如:

    /NavigatingBetweenPages;component/OtherPages/Page1.xaml

    OtherPages/Page1.xaml

  • NavigationService(C#靈活跳轉) 當要跳轉的頁面地址不固定,需要給據不同情況跳轉不同頁面時,需要在C#中需要使用NavigationService的Navigate()。此方法更加靈活可控。
  • NavigationService(實現常規控制項的超鏈) 除了HeyperlinkButton實現超連結,其他常規的控制項只要設定控制項的NavigationServiece.Navigate()指定uri也可以是實現跳轉。
  • NavigationService 常用成員

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多頁面程式

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.