在WP7上修改应用程序页面堆栈以按后退按钮

时间:2011-06-28 09:42:01

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

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

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

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

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

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

3 个答案:

答案 0 :(得分:3)

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

NavigationService.RemoveBackEntry();

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

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

答案 1 :(得分:1)

链接文章介绍了如何将在webbrowser中导航到的页面添加到后台堆栈。

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

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

答案 2 :(得分:0)

首先,感谢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启动它,则将清除导航堆栈。