Очистка backstack в NavigationService - PullRequest
9 голосов
/ 23 ноября 2011

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

Ответы [ 2 ]

22 голосов
/ 23 ноября 2011

Вы можете использовать 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();
}
0 голосов
/ 25 сентября 2014

Хотя я знаю, что первоначальный вопрос был для 7, в Windows Phone 8.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);
 }
...