Очистка 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);
}