Как удалить страницу из истории навигации?


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

7 9

7 ответов:

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

EDIT: в Mango есть служба навигации.RemoveBackEntry() функция, которая делает именно то, что нужно.

Невозможно перейти непосредственно со страницы№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) Будьте осторожны с тем, что происходит, когда tombstoned, когда отображается страница#2 или страница#3.

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

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

  NavigationService.Navigate(new Uri("/MainPage.xaml", UriKind.RelativeOrAbsolute));
Это приведет вас к первой странице, но также добавит страницу 3 в задний стек.

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

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

Охраняемых переопределить недействительными OnBackKeyPress(системы.ComponentModel.CancelEventArgs e) { Служба навигации.Navigate (new Uri ("/MainPage.xaml", UriKind.Родственник)); }

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

Очистка backstack в NavigationService

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

NavigationService.GoBack();

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

    private void LayoutRoot_Loaded(object sender, RoutedEventArgs e)
    {
        try { while (NavigationService.RemoveBackEntry() != null) ; }
        catch (System.NullReferenceException ex) { }
    }