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

C# 如何在非Silverlight应用程序中删除backbackback中的最后一项?,c#,silverlight,windows-runtime,win-universal-app,C#,Silverlight,Windows Runtime,Win Universal App,假设我有两页:Page1和Page2 当我的应用程序启动时,我导航到Page1,最终导航到Page2。在Page2上,我想阻止用户使用后退按钮返回Page1。类似地,我想阻止用户使用后退按钮从Page1导航到Page2(可以从Page2导航到Page1) 我知道在Silverlight应用程序中,您只需使用: NavigationService.RemoveBackEntry(); 然而,我的应用程序是使用Windows10API构建的,它不是基于Silverlight的。我试过做: 在第2页

假设我有两页:
Page1
Page2

当我的应用程序启动时,我导航到
Page1
,最终导航到
Page2
。在
Page2
上,我想阻止用户使用后退按钮返回
Page1
。类似地,我想阻止用户使用后退按钮从
Page1
导航到
Page2
(可以从
Page2
导航到
Page1

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

NavigationService.RemoveBackEntry();
然而,我的应用程序是使用Windows10API构建的,它不是基于Silverlight的。我试过做:
第2页

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.
    //...
}
if (Frame.BackStack[Frame.BackStackDepth - 1].SourcePageType == typeof(Page1))
    Frame.BackStack.RemoveAt(Frame.BackStackDepth - 1);
第1页

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(新页面堆栈条目(e.SourcePageType,e.Parameter,e.NavigationTransitionInfo);
而不是
Frame.BackStack.RemoveAt(Frame.BackStackDepth-1);


所有这些都不是我想要的。我能做些什么才能让它工作呢?

e.SourcePageType
似乎返回当前页面的类型,而不是实际的源。我通过添加以下代码解决了这个问题:
对于
Page1
(由于
Page1
有时会收到来自
App.xaml.cs
Frame.Navigate()
调用,会出现
ArgumentOutOfRangeException
,因为当时没有后台堆栈,所以需要尝试捕获):

然后在
第2页

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.
    //...
}
if (Frame.BackStack[Frame.BackStackDepth - 1].SourcePageType == typeof(Page1))
    Frame.BackStack.RemoveAt(Frame.BackStackDepth - 1);

该应用程序现在可以正常工作。

e.SourcePageType
似乎返回当前页面的类型,而不是实际的源。我通过添加以下代码解决了此问题:
对于
Page1
(由于
Page1
有时会收到来自
App.xaml.cs
Frame.Navigate()
调用,会出现
ArgumentOutOfRangeException
,因为当时没有后台堆栈,所以需要尝试捕获):

然后在
第2页

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.
    //...
}
if (Frame.BackStack[Frame.BackStackDepth - 1].SourcePageType == typeof(Page1))
    Frame.BackStack.RemoveAt(Frame.BackStackDepth - 1);

该应用程序现在可以正常工作。

我刚刚尝试了
Frame.BackStack.RemoveAt(Frame.BackStackDepth-1)
而且它工作完美无瑕。你有什么问题?你如何处理按下后退按钮的问题?@KooKiz我一直在使用
e.SourcePageType
检查上一页是否是当前页,而这似乎只是当前页。不是实际的源。我将添加一种方法来确定实际的源页。我将在以后更新这里。我只是不这样做ried
Frame.backback.RemoveAt(Frame.backbackbackdepth-1)
而且它工作得非常完美。你有什么问题?你如何处理按下后退按钮?@KooKiz我一直在使用
e.SourcePageType
来检查上一页是否是当前页,而这似乎只是当前页。不是实际的源。我将添加一种方法来确定实际的源页。之后我将在这里更新。