清除NavigationService中的backstack

mas*_*ake 9 windows-phone-7 navigationservice

我在我的应用程序中浏览不同的页面.登录后,我来到导航开始的主页.在导航期间,当我来到主页时,我想通过按BackKey进入登录页面,但我只能导航到以前导航的页面.我可以覆盖BackKeyPress事件以导航到登录页面,但在LoginPage中我应该再次覆盖Backkeypress,否则在登录页面和主页之间似乎存在循环按下后退键.反正有没有清除导航历史记录?

Kev*_*sse 22

您可以使用NavigationService.RemoveBackEntry: http://msdn.microsoft.com/en-us/library/system.windows.navigation.navigationservice.removebackentry%28v=VS.92%29.aspx

例如,要从堆栈中删除所有条目:

while (this.NavigationService.BackStack.Any())
{
   this.NavigationService.RemoveBackEntry();
}
Run Code Online (Sandbox Code Playgroud)


此外,如果要在检查其URI后仅删除上一页:

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

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

  • RemoveBackEntry有时会抛出NullReferenceException.导航系统内部的一些逻辑被破坏,所以在FAS上,它会添加使用PageInstance == null的幻像journalentries. (2认同)