Я перемещаюсь по разным страницам в своем приложении. После входа в систему я попадаю на домашнюю страницу, откуда начинается навигация. Во время навигации, когда я захожу на домашнюю страницу, я хочу перейти на страницу входа, нажав BackKey, но я могу перейти только на предыдущую страницу. Я мог бы переопределить событие BackKeyPress для перехода на страницу входа, но в LoginPage я должен снова переопределить Backkeypress, иначе при нажатии клавиши возврата появляется цикл между страницей входа и домашней страницей. Можно ли как-то очистить историю навигации?
Очистка обратного стека в NavigationService
Ответы (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();
}
person
Kevin Gosse
schedule
23.11.2011
RemoveBackEntry иногда вызывает исключение NullReferenceException. Некоторая логика внутри навигационной системы нарушена, поэтому в FAS она иногда добавляет фантомные журнальные записи с PageInstance == null.
- person Grigory; 01.08.2012
Если бы я хотел удалить только одну страницу, поскольку моя навигация — это A, а затем B, и я хочу удалить A, я бы просто вызвал
this.NavigationService.RemoveBackEntry();
в событии OnNavigatedTo? Я бы использовал строку запроса от A до B, чтобы убедиться, что навигация к B была из A.
- person Matthew; 08.10.2013
Хотя я знаю, что первоначальный вопрос был для 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);
}
person
Adam
schedule
25.09.2014
Оно делает. Я использую его в своем приложении Windows Phone 8.1 Silverlight.
- person Mangesh; 15.12.2014