Windows Phone 7(WP7)開發 “后退按鍵” 與 “在OnNavigationTo中處理QueryString”


先看一張簡圖:

在程序中進行頁面的跳轉是再正常不過的事情了,但是在WP7的程序中,我們可能還需要多考慮一下后退按鈕給我帶來的“麻煩”。

在上圖中的這種頁面結構中,假設在page2.xaml.cs中有如下代碼:

        protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
base.OnNavigatedTo(e);

if (NavigationContext.QueryString.ContainsKey("id"))
{
string id= NavigationContext.QueryString["id"];
if (id=="1")
NavigationService.Navigate(new Uri("page3.xaml",UriKind.Relative));
}
}

   盡管這個邏輯很奇怪,為什么ID=1的時候就跳到PAGE3呢?哦,那不是我們討論的重點。

  運行程序,現象如下:從Page1點擊某按鈕並傳遞id=1到Page2,然后Page2直接跳轉到了Page3.如果此時想后退,按手機左下角的“后退”按鈕,問題來了!屏幕閃一下,又回到了Page3.原理很簡單,就是因為Page2每次OnNavigatedTo都判斷Url中是否有id這個參數,如果有就跳到了page3,不幸的是,在page3里面按后退鍵,這個Url還是之前的帶參數的Url。

  解決這個問題,可以加一行代碼解決:

protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
base.OnNavigatedTo(e);

if (NavigationContext.QueryString.ContainsKey("id"))
{
string id= NavigationContext.QueryString["id"];
if (id=="1")
     {
    NavigationContext.QueryString.Remove("id");
NavigationService.Navigate(new Uri("page3.xaml",UriKind.Relative));
     }
}
}

  NavigationContext.QueryString.Remove("id");這個語句可以把當前的Url中的某個參數移除掉。這樣再在page3里面后退回page2,就能停在page2了。

 

  NavigationContext.QueryString.Remove("")實際使用需求情形:為了避免OnNavigatedTo重復處理同一問題,以及上面說的的這種頁面跳轉情況(當然也可以用其他的方法避免這種復雜的跳轉)。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM