Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows phone 7 从导航堆栈中删除页面_Windows Phone 7 - Fatal编程技术网

Windows phone 7 从导航堆栈中删除页面

Windows phone 7 从导航堆栈中删除页面,windows-phone-7,Windows Phone 7,我有以下应用程序架构: [List Page] -> [Detail Page] -> [ShareOnFacebook Page] ^__________________| 用户在[列表页] 用户可以单击共享按钮,也可以不单击。如果用户单击了该按钮,则应用程序将导航到一个[ShareOneFacebook页面],该页面将显示Facebook登录表单,发布消息并返回 用户返回 如果用户在facebook上共享,它将“重新发布”消息,因为应用

我有以下应用程序架构:

[List Page] -> [Detail Page] -> [ShareOnFacebook Page]
                     ^__________________|
  • 用户在
    [列表页]
  • 用户可以单击
    共享
    按钮,也可以不单击。如果用户单击了该按钮,则应用程序将导航到一个
    [ShareOneFacebook页面]
    ,该页面将显示Facebook登录表单,发布消息并返回
  • 用户返回
  • 如果用户在facebook上共享,它将“重新发布”消息,因为应用程序存储会话,因此它将导航回ShareOnFacebook,然后返回我的详细信息页面

    如果用户没有共享,他将返回列表页面


    我如何在导航堆栈中“ommit”ShareOnFacebook页面?

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

    如果要“跳过”backbackback中的某个页面,请在该页面的NavigatedTo()函数中放置一些逻辑

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

    以下是伪代码:

    if(已发布)
    Navigation.GoBack()

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

    查看新页


    下载,我为同一个问题发布了一个示例


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

    试试这个:调用
    导航服务。RemoveBackEntry()on导航到
    方法中的code>。这将从堆栈中删除上一页。在我看来,
    Navigation.GoBack()的技巧不令人满意,因为它显示要删除的页面的时间很短


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

    我在
    导航服务
    类上使用
    removeBackEntry
    方法。我也用它来设置自己的启动屏幕

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

    请看一看我为此编写的简单库:

    var fluent=新的FluentNavigation(根框架);
    流利。WhenNavigatedTo()
    .ThenTo()
    .然后到任何页面()
    .从后台移除入口(1);
    流利。WhenNavigatedTo()
    .ThenTo()
    .ThenTo()
    .ThenTo()
    .RemoveEntries from BackstackTill();
    流利。WhenNavigatedTo()
    .ThenTo()
    .ThenTo()
    .然后选择()
    .然后到任何页面()
    .RemoveEntries from BackstackTill();
    流利。WhenNavigatingTo()
    .RedirectTo();
    流利。WhenNavigatingTo()
    .If(()=>false)
    .RetirectWithReturnUri(“ReturnUri”);
    
    它是可行的,但它完全是一种黑客行为。我喜欢机器人模型,它可以先呼叫完成,然后移动,效果很好。谢谢,我更改了批准的答案。我最初的问题是在Mango之前,但我想现在新的人需要这个答案嗨,这个项目还活着吗?Vitalii,目前我没有为WP开发,所以我不会对库做任何更改。但是,请放心,我会接受任何可以帮助您和其他用户的更改。可能会晚一点-现在我正在寻找经验证的解决方案来处理导航。我有主轴心泄漏,当在上面导航时,我有两个视图。不知何故,使用fluent对我的情况没有帮助。
    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");