2013-10-14 2 views
0

Я редактирую свою навигацию для своего приложения. Это довольно основной на данный момент трассировки стека страниц будет 3 слоя глубиной:Хотите позвонить RootFrame.GoBack(); несколько раз для WindowsPhone

Главная страница> Выбор Вид> Добавить новый элемент

На странице «Добавить новый элемент» У меня есть кнопка отмены, где I» d хотел бы перейти на главную страницу. Я в настоящее время есть посланники проводной до до App.xaml.cs, где внутри там я слушаю сообщение и будет пытаться вернуться обратно дважды с кодом:

for (int i = 0; i <= navigationMessage.BackKeyTimes; i++) 
{ 
    if (RootFrame.CanGoBack) 
    { 
     RootFrame.GoBack(); 
    } 
} 

Однако независимо от того, сколько раз я Переберите I только перейдите к предыдущей странице «Вид выбора». Установил ли Microsoft некоторые ограничения на количество страниц, на которые вы можете вернуться?

+0

'NavigationService.Navigate (новый Uri ("/MainPage.xaml ", UriKind.Relative));' – Damith

+0

Спасибо Damith. Это будет одна работа для примера, но тогда стек страниц не будет на 4 уровня глубоким (Главная страница> Выбор> Добавить новый элемент> Главная страница)? – n00b

+0

Хорошо, вам лучше прочитать [this] (http://blogs.windows.com/windows_phone/b/wpdev/archive/2010/12/13/solving-circular-navigation-in-windows-phone-silverlight-applications. aspx) – Damith

ответ

0

В качестве названия метода RootFrame.GoBack(); уже сказано, что его следует использовать только для навигации на одной странице назад в стек навигационной системы.

Что вы можете сделать здесь следующее:

private void Cancel() 
{ 
    // Delete "Selection View" from the navigation stack 
    NavigationService.RemoveBackEntry(); 

    // Navigate back to the MainPage 
    NavigationService.Navigate(new Uri("/MainPage.xaml?clear=true", UriKind.Relative)); 
} 

На главной странице теперь вы можете запросить четкий параметр в методе OnNavigatedTo. Если это верно вызов NavigationService.RemoveBackEntry(); снова, чтобы удалить страницу «Add New Item» (где вы переходите из) из стека:

protected override async void OnNavigatedTo(NavigationEventArgs e) 
{ 
    base.OnNavigatedTo(e);    
    string clearParam; 

    if (NavigationContext.QueryString.TryGetValue("clear", out clearParam)) 
    { 
     if (Convert.ToBoolean(clearParam)) 
     { 
      // Delete "Add New Item" from the navigation stack 
      NavigationService.RemoveBackEntry(); 
     } 
    } 
} 

Удаляя страницы навигации стека вы не можете вернуться обратно в любой другой через кнопку «Назад» при возврате на MainPage. Это то, что вам нужно?

Скажите, пожалуйста, это сработало для вас. Удачи!

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