「後退按鍵」 與 「在OnNavigationTo中處理QueryString」

 先看一張簡圖:ide

 

在程序中進行頁面的跳轉是再正常不過的事情了,可是在WP7的程序中,咱們可能還須要多考慮一下後退按鈕給我帶來的「麻煩」。spa

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

        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呢?哦,那不是咱們討論的重點。blog

  運行程序,現象以下:從Page1點擊某按鈕並傳遞id=1到Page2,而後Page2直接跳轉到了Page3.若是此時想後退,按手機左下角的「後退」按鈕,問題來了!屏幕閃一下,又回到了Page3.原理很簡單,就是由於Page2每次OnNavigatedTo都判斷Url中是否有id這個參數,若是有就跳到了page3,不幸的是,在page3裏面按後退鍵,這個Url仍是以前的帶參數的Url。string

  解決這個問題,能夠加一行代碼解決:it

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了。io

 

  NavigationContext.QueryString.Remove("")實際使用需求情形:爲了不OnNavigatedTo重複處理同一問題,以及上面說的的這種頁面跳轉狀況(固然也能夠用其餘的方法避免這種複雜的跳轉)。class

相關文章
相關標籤/搜索