Удалить страницу из стека навигации - PullRequest
13 голосов
/ 14 декабря 2010

У меня есть схема приложения:

[List Page] -> [Detail Page] -> [ShareOnFacebook Page]
                     ^__________________|
  1. Пользователь выбирает Item в [List Page]
  2. Пользователь может или не может щелкнуть ShareЕсли он нажимает кнопку, приложение переходит к [ShareOneFacebook page], в котором отображается форма входа в Facebook, отправляет сообщение и возвращается назад
  3. . Пользователь переходит назад.

ЕслиПользователь поделился им на Facebook, он «перепечатает» сообщение, потому что приложение сохранит сеанс, поэтому вернется к ShareOnFacebook, а затем вернется на мою страницу сведений.

Если пользователь не поделился,возвращается на страницу списка.

Как я могу "пропустить" страницу ShareOnFacebook в моем стеке навигации?

Ответы [ 6 ]

27 голосов
/ 03 сентября 2011

Попробуйте это: Вызовите NavigationService.RemoveBackEntry(); в методе OnNavigatedTo. Это удалит предыдущую страницу из стека. По моему мнению, уловка с Navigation.GoBack(); не устраивает, потому что она показывает страницу, которую нужно удалить на короткое время.

Примечание: работает только с Windows Phone OS 7.1 (Mango) SDK

3 голосов
/ 25 апреля 2013

Взгляните на простую библиотеку, которую я написал для таких целей: http://navcoerce.codeplex.com/

var fluent = new FluentNavigation(RootFrame);                          

fluent.WhenNavigatedTo<MainPage>()                                     
      .ThenTo<LoginPage>()                                             
      .ThenToAnyPage()                                                 
      .RemoveEntriesFromBackStack(1);                                  

fluent.WhenNavigatedTo<MainPage>()                                     
      .ThenTo<LoginPage>()                                             
      .ThenTo<RegisterPage>()                                          
      .ThenTo<PaymentPage>()                                           
      .RemoveEntriesFromBackStackTill<MainPage>();                     

fluent.WhenNavigatedTo<MainPage>()                                     
      .ThenTo<SecondPage>()                                            
      .ThenTo<RegisterPage>()                                          
      .ThenOptionallyTo<ForgotPasswordPage>()                          
      .ThenToAnyPage()                                                 
      .RemoveEntriesFromBackStackTill<MainPage>();                     

fluent.WhenNavigatingTo<PaymentPage>()                                 
      .RedirectTo<LoginPage>();                                        

fluent.WhenNavigatingTo<PaymentPage>()                                 
      .If(() => false)                                                 
      .RedirectWithReturnUri<LoginPage>("ReturnUri");   
3 голосов
/ 14 декабря 2010

В моем приложении похожая ситуация, я решаю ее очень простым решением.

Если вы хотите «пропустить» страницу в вашем backstack, поместите некоторую логику в функцию NavigatedTo () этой страницы.

Например: у вас может быть bool, для которого вы установили значение true при публикации в Facebook, а затем поместить следующий код в функцию NavigatedTo () страницы ShareOnFacebook.

Вот псевдокод:

if (alreadyPosted) Navigation.GoBack();

Функция GoBack () пропустит эту страницу и вернется к предыдущей, пользователь никогда не увидит страницу.

1 голос
/ 01 ноября 2012

Я использую метод removeBackEntry в классе NavigationService.Я также использую это как способ настроить свои собственные заставки

        private void BWorkerRunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
    {
        // switch screen 
        NavigationService.Navigated += new NavigatedEventHandler(NavigationServiceNavigated);
        NavigationService.Navigate(new Uri("/Pages/main.xaml", UriKind.Relative));

    }

    void NavigationServiceNavigated(object sender, NavigationEventArgs e)
    {
        NavigationService.RemoveBackEntry();
    }
1 голос
/ 14 декабря 2010
0 голосов
/ 14 декабря 2010

Я разместил пример для той же проблемы здесь.

Служба нелинейной навигации Matt, связанная с по существу, делает то же самое, но, вероятно, будет лучше, чем мой простой пример.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...