先看一张简图: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