我正在Windows Phone 7.8中开发一个应用程序,在其中打开一个网页。我必须在该页面内导航。
我希望在按下后退按钮时,它会回到该网页内部,但每次按下它时,应用程序都会关闭。
如何修改该按钮的行为?有可能吗?
答案 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建议的那样,使用它时要小心。根据微软的说法,如果你按后退键,当你在第一页时,应用程序必须关闭。所以不要在第一页上使用此覆盖。