代码之家  ›  专栏  ›  技术社区  ›  Sergey Aldoukhov

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

  •  9
  • Sergey Aldoukhov  · 技术社区  · 15 年前

    我的应用程序有3个页面。第2页导航回第1页,然后前进到第3页。如何才能使从第3页返回时跳过第2页直接转到第1页?

    7 回复  |  直到 15 年前
        1
  •  6
  •   Sergey Aldoukhov    14 年前

    最后,我将第2页和第3页合并在一个页面中。当我需要第#2页时,我使用navigation参数以#2内容可见的方式启动页面,当我完成#3时,我只需隐藏#2内容。

    编辑:在芒果中,有一个NavigationService.RemoveBackEntry()功能,完全满足需要。

        2
  •  4
  •   Matt Lacey    15 年前

    从第3页直接到第1页是不可能不经过第2页的。

    不管怎样你都能应付 OnNavigatedTo 在第#2页,如果来自第#3页,则再次致电 NavigationService.GoBack() .
    比如:

    protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
    {
      if (comingFromPage3)
      {
        NavigationService.GoBack();
      }
    
      base.OnNavigatedTo(e);
    }
    

    如果来自第3页,您可以通过多种方式进行跟踪。我很想用一个全局变量来表示这一点(在第3页设置,在第2页签入)。

        3
  •  2
  •   Walt Ritscher    15 年前

    如果您使用的是硬件后退按钮,那么没有直接的方法可以做到这一点。

    您可以始终使用导航方法直接转到第一页。

      NavigationService.Navigate(new Uri("/MainPage.xaml", UriKind.RelativeOrAbsolute));
    

    这将使您进入第一页,但它也将第3页添加到后堆栈。

        4
  •  1
  •   Pete Stockley    14 年前

    我建议过多地按“后退”按钮来指导用户您希望他们去的地方:

    受保护的覆盖无效OnBackKeyPress(System.ComponentModel.CancelEventArgs电子) { 导航服务。导航(新Uri(“/主页.xaml", 乌里金。亲戚)); }

        5
  •  1
  •   Community Mohan Dere    8 年前

    现在可以直接从后堆栈中删除页面。有关详细信息,请参阅此线程:

    Clearing backstack in NavigationService

        6
  •  0
  •   AnthonyWJones    15 年前

    与其第2页导航到第1页,不如考虑使用代码:-

    NavigationService.GoBack();
    
        7
  •  0
  •   Sorokin Andrey    12 年前

        private void LayoutRoot_Loaded(object sender, RoutedEventArgs e)
        {
            try { while (NavigationService.RemoveBackEntry() != null) ; }
            catch (System.NullReferenceException ex) { }
        }
    
    推荐文章