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