Очистка backstack в NavigationService

я перемещаюсь по разным страницам в моем приложении. После входа в систему я прихожу на домашнюю страницу, с которой начинается навигация. Во время навигации, когда я прихожу на главную страницу, Я хочу перейти на страницу входа, нажав клавишу BackKey, но я могу перейти только на ранее перемещенную страницу. Я мог бы переопределить событие BackKeyPress для перехода на страницу входа в систему, но в LoginPage я должен снова переопределить Backkeypress, иначе между loginpage и homepage появится цикл нажмите клавишу backkey. Можно ли очистить историю навигации?

2 ответов


Вы можете использовать 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();
}


Кроме того, если вы хотите удалить только предыдущую страницу после проверки ее URI:
var previousPage = this.NavigationService.BackStack.FirstOrDefault();

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

хотя я знаю, что исходный вопрос был для 7, в Windows Phone 8.1 NavigationService больше не существует.

вот код 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);
 }