Windows phone 8 Windows Phone 8:阻止将PhoneApplicationPage添加到Backback

Windows phone 8 Windows Phone 8:阻止将PhoneApplicationPage添加到Backback,windows-phone-8,back-stack,Windows Phone 8,Back Stack,我有一个可以导航到另一个的电话页面。当导航到第二页时,有没有办法防止第一页进入后台 我不希望在第二页的代码中删除backbackback中的第一页。不,没有办法。如果不想让它出现在那里,为什么不删除它?我在实现登录页面时也有同样的要求。在导航到应用程序的已验证区域后,我想从backback中删除登录页面 要做到这一点,我只需在登录视图中的导航调用之后弹出堆栈 NavigationService.Navigate("/Page2.xaml"); NavigationService.RemoveBa

我有一个可以导航到另一个的电话页面。当导航到第二页时,有没有办法防止第一页进入后台


我不希望在第二页的代码中删除backbackback中的第一页。

不,没有办法。如果不想让它出现在那里,为什么不删除它?

我在实现登录页面时也有同样的要求。在导航到应用程序的已验证区域后,我想从backback中删除登录页面

要做到这一点,我只需在登录视图中的导航调用之后弹出堆栈

NavigationService.Navigate("/Page2.xaml");
NavigationService.RemoveBackEntry();

这不需要在Page2.xaml中使用代码。

最明显的工作方式是:

NavigationService.Navigate(new Uri(...));
NavigationService.RemoveBackEntry();
但它可能会失败-请参阅所描述的提交问题

如果您要删除第二页上的backback条目(从而分散导航上下文中第一页行为的知识),您可以在
OnNavigatedTo
中删除该条目,这将在导航完成且条目放置在
backbackback
上后发生。PhoneApplicationPage同样具有
OnNavigatedFrom
方法,该方法也在导航完成后调用(
OnNavigatingFrom
在导航之前调用,并允许取消)。因此,第一页可以通过以下方式删除自身:

protected override void OnNavigatedFrom(NavigationEventArgs e)
{
    NavigationService.RemoveBackEntry();
}
但是,此方法是不完整的,因为
OnNavigatedFrom
不仅在成功的
导航后调用,而且在按下三个设备按钮中的任何一个按钮或显示
启动器
选择器
(来自
Microsoft.Phone.Task
)后调用。在这些情况下,当前页面将不会被放置在
BackStack
(我想这就是为什么
BackStack
更正通常应用于其他页面的原因)。因此,要修复上述方法,您可以检查最后一个条目是否正确:

protected override void OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs e)
{
    var entry = NavigationService.BackStack.FirstOrDefault();
    if (entry != null && entry.Source.OriginalString.Contains(...))
    {
        NavigationService.RemoveBackEntry();
    }
}

我认为没有办法。您希望这样做以避免使用后退按钮从第二个页面返回此(第一个)页面?+1,很好,包括启动器/选择器和其他情况。想象一个页面实现了一个简单的选择机制,如全屏组合框。选择一个选项后,您不想使用“上一步”按钮返回该选项。实际上,要执行此操作,您需要向前导航到“选取器”页面,然后在选取后返回。所有采摘器都是这样建造的。