0

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

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

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

4

2 回答 2

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;
    }
}
于 2013-10-08T15:45:04.913 回答
1

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

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

     e.Cancel = true; 
}

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

于 2013-10-08T15:07:45.633 回答