如何从导航历史中删除页面?

时间:2010-09-28 03:57:03

标签: silverlight windows-phone-7

我的应用中有3个页面。第2页导航回第1页并转发到第3页。我怎样才能这样做,所以从第3页开始导航会跳过第2页并直接转到第1页?

7 个答案:

答案 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)

您现在可以直接从后台堆栈中删除页面。有关更多信息,请参阅此主题:

Clearing backstack in NavigationService

答案 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) { }
    }