我正在 windows phone 7.8 中开发一个应用程序,它会在其中打开一个网页。我必须在该页面内导航。
我希望在按下后退按钮时,它会返回该网页,但每次按下它,应用程序都会关闭。
如何修改该按钮的行为?可能吗?
我正在 windows phone 7.8 中开发一个应用程序,它会在其中打开一个网页。我必须在该页面内导航。
我希望在按下后退按钮时,它会返回该网页,但每次按下它,应用程序都会关闭。
如何修改该按钮的行为?可能吗?
在 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;
}
}
记住以Cancel
这种方式调用事件:
protected override void OnBackKeyPress(ComponentModel.CancelEventArgs e)
{
// your code
e.Cancel = true;
}
正如 ARM 建议的那样,使用它时要小心。根据微软的说法,如果你按下返回键,当你在第一页时,应用程序必须关闭。所以不要在第一页上使用这个覆盖。