2014-03-06 3 views
1

У меня есть страница телефона, которая переходит на другую. Есть ли способ предотвратить попадание первой страницы в стопку при переходе ко второму?Windows Phone 8: Предотвращение добавления PhoneApplicationPage в стопку

Я бы предпочел не удалять первую страницу из задней части кода кода для второй страницы.

+0

Я не думаю, что есть способ. Вы хотите сделать это, чтобы избежать возврата к этой (первой) странице со второй, используя кнопку «Назад»? –

ответ

4

Наиболее очевидный способ вида работ:

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(); 
    } 
} 
+0

+1, хороший, в том числе Пусковые установки/Выборы и другие случаи. – Romasz

-1

Нет, не существует способа. Почему бы вам не удалить его, если вы не хотите, чтобы он был там?

+0

Представьте себе страницу, реализующую простой механизм выбора, такой как полноэкранный Combobox. После выбора вариант, который вы не хотите возвращаться туда, используя кнопку «Назад». – Jensen

+1

На самом деле, чтобы сделать это, вы перемещаете _forward_ на страницу выбора и идите _back_ после выбора. Все сборщики построены таким образом. –

0

У меня такое же требование при внедрении страницы входа. При переходе на аутентифицированную область приложения я хочу удалить страницу входа из задней части.

Для этого я просто вышиваю стек после вызова для навигации из окна входа.

NavigationService.Navigate("/Page2.xaml"); 
NavigationService.RemoveBackEntry(); 

Это не требует кода на вашем Page2.xaml.

Смежные вопросы