如何在非Silverlight应用程序中删除BackStack中的最后一项?

时间:2015-10-02 12:32:38

标签: c# silverlight windows-runtime win-universal-app

假设我有2个页面:Page1Page2

当我的应用开始时,我会导航到Page1,最终导航到Page2。在Page2,我想阻止用户使用后退按钮返回Page1。同样,我希望阻止用户使用后退按钮从Page1导航到Page2(可以从[{1}}导航到Page1)。

我知道在Silverlight应用中,您只需使用:

Page2

但是,我的应用程序是使用Windows 10 API构建的,这些API不是基于Silverlight的。我尝试过这样做:
NavigationService.RemoveBackEntry();

Page2

protected override void OnNavigatedTo(NavigationEventArgs e) { //... if (e.SourcePageType == typeof(Page1)) Frame.BackStack.RemoveAt(Frame.BackStackDepth - 1); // remove the last entry if it represents Page1. //... }

Page1

我也尝试使用protected override void OnNavigatedTo(NavigationEventArgs e) { //... if (e.SourcePageType == typeof(Page2)) Frame.BackStack.RemoveAt(Frame.BackStackDepth - 1); // remove the last entry if it represents Page2. //... } Frame.BackStack.RemoveAt(0);代替Frame.BackStack.Remove(new PageStackEntry(e.SourcePageType, e.Parameter, e.NavigationTransitionInfo);

这些都不是我想要的。我能做些什么才能做到这一点?

1 个答案:

答案 0 :(得分:0)

e.SourcePageType似乎返回当前页面的类型而不是实际来源。我通过添加以下代码解决了这个问题:
对于Page1(因为Page1有时会收到来自Frame.Navigate()的{​​{1}}来电,会发生App.xaml.cs,因为当时没有后备筹码,所以试一试-catch是必要的):

ArgumentOutOfRangeException

然后在try { if (Frame.BackStack[Frame.BackStackDepth - 1].SourcePageType == typeof(Page2)) Frame.BackStack.RemoveAt(Frame.BackStackDepth - 1); } catch (Exception) { // an ArgumentOutOfRangeException }

Page2

该应用现在按预期工作。