Как удалить страницу из истории навигации?
У меня есть 3 страницы в моем приложении. Страница № 2 позволяет вернуться на страницу №1 и перейти на страницу № 3. Как я могу сделать так, что переход назад со страницы №3 пропустит страницу № 2 и перейдет непосредственно к #1?
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.
Если вы используете аппаратную кнопку назад, то нет прямого способа сделать это.
Вы всегда можете использовать метод навигации, чтобы перейти непосредственно на первую страницу.
Это приведет вас к первой странице, но также добавит страницу 3 в задний стек.NavigationService.Navigate(new Uri("/MainPage.xaml", UriKind.RelativeOrAbsolute));
В WPF вы всегда можете использовать метод RemoveBackEntry() для очистки элементов из заднего стека, но, к сожалению, он недоступен в Silverlight для телефона.
Я рекомендую перекрывать нажатие кнопки назад, чтобы направить пользователя туда, куда вы хотите, чтобы он пошел:
Охраняемых переопределить недействительными OnBackKeyPress(системы.ComponentModel.CancelEventArgs e) { Служба навигации.Navigate (new Uri ("/MainPage.xaml", UriKind.Родственник)); }
Теперь вы можете удалить страницы из заднего стека напрямую. Смотрите эту тему для получения дополнительной информации: