假设我有2个页面:Page1
和Page2
。
当我的应用开始时,我会导航到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);
。
这些都不是我想要的。我能做些什么才能做到这一点?
答案 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
该应用现在按预期工作。