先看一張簡圖: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