覆盖后退按钮窗口电话7

时间:2013-10-08 15:04:13

标签: windows-phone-7

我正在Windows Phone 7.8中开发一个应用程序,在其中打开一个网页。我必须在该页面内导航。

我希望在按下后退按钮时,它会回到该网页内部,但每次按下它时,应用程序都会关闭。

如何修改该按钮的行为?有可能吗?

2 个答案:

答案 0 :(得分:2)

在WP7中,您无法访问控件的导航历史记录,因此您可能需要自行实施。我可以做这样的事情。

1在控件中处理导航事件,每次访问页面时,将Uri推到一堆Uris上。
2在后退键上,如果堆栈中有超过1个Uri(即超过最初加载的页面),请导航到上一个URI(因为我们无法返回,通过导航到前一个来伪造它网页...)
3如果我们位于堆栈的第一个条目,请让系统按下按钮。

public MainPage()
{
    InitializeComponent();
    WB1.Navigated += WB1_Navigated;
}

Stack<Uri> visitedUrls = new Stack<Uri>();

void WB1_Navigated(object sender, System.Windows.Navigation.NavigationEventArgs e)
{
    visitedUrls.Push(e.Uri);
}

protected override void OnBackKeyPress(System.ComponentModel.CancelEventArgs e)
{
    if (visitedUrls.Count > 1)
    {
        WB1.Navigate(visitedUrls.Pop());
        e.Cancel = true;
    }
}

请注意,这远非完美,并且不会处理表单重新提交,例如。

在WP8中,您将检查浏览器的导航堆栈是否允许您返回。如果是,请返回并取消按下按钮。如果没有,让系统为您处理后退按钮。

protected override void OnBackKeyPress(ComponentModel.CancelEventArgs e)
{
    if (myBrowserInstance.CanGoBack)
    {
        myBrowserInstance.GoBack();
        e.Cancel = true;
    }
}

答案 1 :(得分:1)

请记住以这种方式Cancel事件调用:

protected override void OnBackKeyPress(ComponentModel.CancelEventArgs e)
{
    // your code 

     e.Cancel = true; 
}

正如ARM建议的那样,使用它时要小心。根据微软的说法,如果你按后退键,当你在第一页时,应用程序必须关闭。所以不要在第一页上使用此覆盖。