Наиболее очевидный способ вида работ:
NavigationService.Navigate(new Uri(...));
NavigationService.RemoveBackEntry();
Но это может произойти сбой - см проблема submision описана here.
Если вы должны удалить запись BackStack на второй странице (и, таким образом, разогнать знание поведения первой страницы в контексте навигации), вы должны это сделать в OnNavigatedTo
, которая возникает после завершения навигации и записи находится на BackStack
. PhoneApplicationPage аналогичным образом имеет метод OnNavigatedFrom
, который также вызывается после завершения навигации (OnNavigatingFrom
вызывается перед навигацией и позволяет отменить). Поэтому первая страница может удалить себя следующим образом:
protected override void OnNavigatedFrom(NavigationEventArgs e)
{
NavigationService.RemoveBackEntry();
}
Однако этот метод является неполным, поскольку OnNavigatedFrom
называется не только после того, как успешного Navigate
, но и после нажатия любого из трех кнопок устройства или показывая Launcher
или Chooser
(от Microsoft.Phone.Task
). В этих случаях текущая страница не будет размещена на BackStack
(я думаю, поэтому исправления BackStack
обычно применяются на других страницах). Поэтому, чтобы исправить вышеуказанный метод, вы можете проверить, является ли последняя запись такой, какой она должна быть:
protected override void OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs e)
{
var entry = NavigationService.BackStack.FirstOrDefault();
if (entry != null && entry.Source.OriginalString.Contains(...))
{
NavigationService.RemoveBackEntry();
}
}
Я не думаю, что есть способ. Вы хотите сделать это, чтобы избежать возврата к этой (первой) странице со второй, используя кнопку «Назад»? –