从导航堆栈中删除页面

时间:2010-12-14 15:14:31

标签: windows-phone-7

我有这个应用程序架构:

[List Page] -> [Detail Page] -> [ShareOnFacebook Page]
                     ^__________________|
  1. 用户在Item
  2. 中选择[List Page]
  3. 用户可能会或不会点击Share按钮,如果他或她,应用程序导航到显示Facebook登录表单的[ShareOneFacebook page],发布消息并导航回来
  4. 用户导航回来。
  5. 如果用户在Facebook上共享,它将“重新发布”该消息,因为应用程序存储会话,因此它将导航回ShareOnFacebook,然后返回到我的详细信息页面。

    如果用户没有分享,他会回到列表页面。

    如何在我的导航堆栈中“省略”ShareOnFacebook页面?

6 个答案:

答案 0 :(得分:27)

试试这个:NavigationService.RemoveBackEntry();方法中调用OnNavigatedTo。这将从堆栈中删除上一页。在我看来,Navigation.GoBack();的技巧并不令人满意,因为它显示了要在短时间内删除的页面。

注意:仅适用于Windows Phone OS 7.1(Mango)SDK

答案 1 :(得分:3)

我的应用程序中有类似的情况,我用一个非常简单的解决方案来解决它。

如果要“跳过”后台堆栈中的页面,请在该页面的NavigatedTo()函数中放置一些逻辑。

例如:当您发布到Facebook时,您可以将bool设置为true,然后将以下代码放在ShareOnFacebook页面的NavigatedTo()函数中。

这是伪代码:

if (alreadyPosted) Navigation.GoBack();

GoBack()函数将跳过此页面并返回上一页,用户将永远不会看到该页面。

答案 2 :(得分:3)

看看我为此目的编写的简单库: 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 :(得分:1)

答案 4 :(得分:1)

我在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();
    }

答案 5 :(得分:0)

我发布了同一个问题here.

的示例

非线性导航服务Matt链接到基本上做同样的事情,但可能比我的简单例子更好。