我的应用中有3个页面。第2页导航回第1页并转发到第3页。我怎样才能这样做,所以从第3页开始导航会跳过第2页并直接转到第1页?
答案 0 :(得分:6)
我最终得到的是将页面#2和#3组合在一个页面中。当我需要第2页时,我使用导航参数来启动可见#2内容的页面,当我完成#3时,我只是隐藏#2内容。
编辑:在Mango中,有一个NavigationService.RemoveBackEntry()函数可以完全满足需要。
答案 1 :(得分:4)
如果不经过第2页,就无法直接从第3页到第1页。
然而,您可以在第2页处理OnNavigatedTo
,如果来自第3页,则会再次拨打NavigationService.GoBack()
。
类似的东西:
protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
if (comingFromPage3)
{
NavigationService.GoBack();
}
base.OnNavigatedTo(e);
}
如果来自第3页,您可以通过多种方式进行跟踪。我很想用一个全局变量来表示这一点(在第3页中设置并在第2页中检查)。
如果您决定使用简单的跟踪页面导航到的次数(即第二次导航到页面必须从#3返回),请注意在页面#2或页面时进行逻辑删除时会发生什么显示#3。
答案 2 :(得分:2)
如果您使用硬件返回按钮,则没有直接的方法可以执行此操作。
您始终可以使用导航方法直接转到第一页。
NavigationService.Navigate(new Uri("/MainPage.xaml", UriKind.RelativeOrAbsolute));
这将使您进入第一页,但它也会将第3页添加到后台。
在WPF中,您始终可以使用RemoveBackEntry()方法清除后台堆栈中的项目,但不幸的是,它在手机的Silverlight中不可用。
答案 3 :(得分:1)
我建议按下后退按钮按键以将用户定向到您想去的地方:
protected override void OnBackKeyPress(System.ComponentModel.CancelEventArgs e) { NavigationService.Navigate(new Uri(“/ MainPage.xaml”,UriKind.Relative)); }
答案 4 :(得分:1)
您现在可以直接从后台堆栈中删除页面。有关更多信息,请参阅此主题:
答案 5 :(得分:0)
而不是专门导航到页面#1的页面#2考虑使用此代码: -
NavigationService.GoBack();
答案 6 :(得分:0)
您应该为您的网页创建“已加载”事件
private void LayoutRoot_Loaded(object sender, RoutedEventArgs e)
{
try { while (NavigationService.RemoveBackEntry() != null) ; }
catch (System.NullReferenceException ex) { }
}