Windows phone 7 清除导航服务中的backbackback

Windows phone 7 清除导航服务中的backbackback,windows-phone-7,navigationservice,Windows Phone 7,Navigationservice,我正在浏览应用程序中的不同页面。登录后,我会从主页开始导航。在导航过程中,当我进入主页时,我想按BackKey进入登录页面,但我只能导航到以前导航过的页面。我可以覆盖BackKeyPress事件以导航到登录页面,但在LoginPage中,我应该再次覆盖BackKeyPress,否则在BackKeyPress上LoginPage和homepage之间似乎存在循环。是否仍要清除导航历史记录?您可以使用NavigationService.RemoveBackEntry: 例如,要从堆栈中删除所有条目,

我正在浏览应用程序中的不同页面。登录后,我会从主页开始导航。在导航过程中,当我进入主页时,我想按BackKey进入登录页面,但我只能导航到以前导航过的页面。我可以覆盖BackKeyPress事件以导航到登录页面,但在LoginPage中,我应该再次覆盖BackKeyPress,否则在BackKeyPress上LoginPage和homepage之间似乎存在循环。是否仍要清除导航历史记录?

您可以使用NavigationService.RemoveBackEntry:

例如,要从堆栈中删除所有条目,请执行以下操作:

while (this.NavigationService.BackStack.Any())
{
   this.NavigationService.RemoveBackEntry();
}

此外,如果要在检查其URI后仅删除上一页,请执行以下操作:

var previousPage = this.NavigationService.BackStack.FirstOrDefault();

if (previousPage != null && previousPage.Source.ToString().StartsWith("/MainPage.xaml"))
{
    this.NavigationService.RemoveBackEntry();
}

虽然我知道最初的问题是针对7,但在WindowsPhone8.1中导航服务已经不存在了

这是Windows Phone 8.1代码

 var previousPage = this.Frame.BackStack.FirstOrDefault();

 if (previousPage != null && previousPage.SourcePageType == typeof(MainPage))
 {
     this.Frame.BackStack.RemoveAt(this.Frame.BackStackDepth - 1);
 }

RemoveBackEntry有时会引发NullReferenceException。导航系统内部的某些逻辑被破坏,因此在FAS it sometiems上添加了PageInstance==null的幻影日志。如果我只想删除一个页面,因为我的导航是a然后是B,并且我想删除a,我只需调用
this.NavigationService.RemoveBackEntry()?我会使用一个从a到B的查询字符串,以确保到B的导航是从a开始的。确实如此。我正在Windows Phone 8.1 Silverlight应用程序中使用它。