【问题标题】:Modifying the application page stack for back button press on WP7修改应用程序页面堆栈以在 WP7 上按下后退按钮
【发布时间】:2011-06-28 09:42:01
【问题描述】:

我有一个应用程序,它使用 Web 浏览器控件在设备上显示本地内容,它作为应用程序中的一个页面托管,它与物理后退按钮很好地集成。

我遇到的问题是,如果我在应用程序栏中放置一个按钮以退出网络浏览器并返回到网络浏览器页面之前的页面,那么 WP7 应用程序页面堆栈会记住这一点,如果我开始按下后退按钮它将转到网络浏览器页面并开始遍历我在浏览器中查看的页面(反向)。

理想情况下,我希望 Web 浏览器页面不包含在应用程序页面堆栈中,我可以在运行时修改堆栈的内容或强制不包含页面吗?

Jaime 文章描述了浏览器控件的使用情况。

http://blogs.msdn.com/b/jaimer/archive/2011/02/04/back-button-press-when-using-webbrowser-control-in-wp7.aspx

【问题讨论】:

    标签: windows-phone-7 webbrowser-control back-button


    【解决方案1】:

    在 Windows Phone 7.0 SDK 中通常无法修改 NavigationStack。在 Mango (7.1) 中,您将能够清除 NavigationStack。

    NavigationService.RemoveBackEntry();
    

    Jesse Liberty 对此有一篇非常好的文章:

    http://jesseliberty.com/2011/05/24/managing-the-back-stack/

    【讨论】:

      【解决方案2】:

      链接的文章展示了如何将浏览器中导航到的页面添加到后台堆栈。

      默认情况下,WebBrowser 控件的导航历史不包含在应用程序返回堆栈中。

      听起来好像您添加了额外的行为(将浏览器历史记录包含在页面返回堆栈中),现在您想要解决它。

      【讨论】:

      • 干杯马特 - 代码取自 Rich,所以我去看看他做了什么:)
      【解决方案3】:

      首先感谢valipour提供的链接!这个解决方案很棒,但我只想补充一点,以清除您需要执行以下操作的所有导航堆栈:

      protected override void OnNavigatedTo(NavigationEventArgs e)
      {
          base.OnNavigatedTo(e);
      
          if (e.NavigationMode == NavigationMode.New
              && NavigationContext.QueryString.ContainsKey("clear"))
          {
              while (NavigationService.CanGoBack)
              {
                  NavigationService.RemoveBackEntry();
              }
          }
      }
      

      如果您将此代码添加到 MainPage.xaml 代码隐藏并使用 /MainPage.xaml?clear=true URI 启动它,则导航堆栈将被清除。

      【讨论】:

        猜你喜欢
        • 2023-04-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多