Как удалить страницу из истории навигации? - PullRequest
9 голосов
/ 28 сентября 2010

У меня есть 3 страницы в моем приложении.Страница № 2 переходит обратно на страницу № 1 и переходит на страницу № 3. Как я могу сделать так, чтобы при переходе назад со страницы № 3 пропускалась страница № 2 и переходил непосредственно к № 1?

Ответы [ 7 ]

6 голосов
/ 22 октября 2010

В результате я соединил страницы № 2 и № 3 на одной странице.Когда мне нужна страница №2, я использую параметр навигации, чтобы открыть страницу с видимым контентом №2, а когда я закончу с №3, я просто скрываю контент №2.функция NavigationService.RemoveBackEntry (), которая делает именно то, что нужно.

4 голосов
/ 28 сентября 2010

Невозможно перейти непосредственно со страницы № 3 на страницу № 1, не пройдя страницу № 2.

Однако вы можете обработать OnNavigatedTo на странице # 2, а если вы идете со страницы # 3, тогда еще раз позвоните NavigationService.GoBack().
Что-то вроде:

protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
  if (comingFromPage3)
  {
    NavigationService.GoBack();
  }

  base.OnNavigatedTo(e);
}

Существуют различные способы отслеживания, если вы переходите со страницы №3. Я бы соблазнился пойти с глобальной переменной, чтобы указать это (установить на странице № 3 и проверить на странице № 2).
Если вы решили использовать простое отслеживание того, сколько раз страница была перемещена (т. Е. Второй раз, когда страница перемещается на нее, должна быть возвращена из # 3), будьте осторожны с тем, что происходит при захоронении, когда либо страница № 2, либо страница Отображается # 3.

2 голосов
/ 01 октября 2010

Если вы используете аппаратную кнопку возврата, то нет прямого способа сделать это.

Вы всегда можете использовать метод навигации, чтобы перейти непосредственно к первой странице.

  NavigationService.Navigate(new Uri("/MainPage.xaml", UriKind.RelativeOrAbsolute));

Это приведет вас к первой странице, но также добавит страницу 3 в задний стек.

В WPF вы всегда можете использовать метод RemoveBackEntry () для очистки элементов из заднего стека, но, к сожалению, он не доступен в Silverlight для телефона.

1 голос
/ 25 ноября 2011

Теперь вы можете удалять страницы из заднего стека напрямую. Смотрите эту тему для получения дополнительной информации:

Очистка backstack в NavigationService

1 голос
/ 11 июля 2011

Я рекомендую переместить нажатие клавиши «Назад», чтобы направить пользователя туда, куда вы хотите, чтобы:

защищенное переопределение void OnBackKeyPress (System.ComponentModel.CancelEventArgs e) {NavigationService.Navigate (new Uri ("/MainPage.xaml ", UriKind.Relative));}

0 голосов
/ 21 июня 2013

Вы должны создать событие "Loaded" для своей страницы

    private void LayoutRoot_Loaded(object sender, RoutedEventArgs e)
    {
        try { while (NavigationService.RemoveBackEntry() != null) ; }
        catch (System.NullReferenceException ex) { }
    }
0 голосов
/ 28 сентября 2010

Вместо того, чтобы переходить со страницы №2 на страницу №1, рассмотрите возможность использования этого кода: -

NavigationService.GoBack();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...