我无法使用后面的硬件按钮来执行我希望它为Windows Phone 8执行的操作。该应用程序严格来说只是webview,所以当现在单击后面(硬件)按钮时它会关闭应用程序。我该如何解决这个问题,以便进入上一个网页或返回索引或其他内容?
由于
这是我目前在MainPage.xaml.cs文件中的内容
namespace AvoidDiabetes
{
public partial class MainPage : PhoneApplicationPage
{
// Url of Home page
private string MainUri = "/Html/index.html";
private Stack<Uri> _history = new Stack<Uri>();
private Uri _current = null;
// Constructor
public MainPage()
{
InitializeComponent();
}
private void Browser_Loaded(object sender, RoutedEventArgs e)
{
// Add your URL here
Browser.Navigate(new Uri(MainUri, UriKind.Relative));
Browser.IsScriptEnabled = true;
}
// Navigates back in the web browser's navigation stack, not the applications.
private void BackApplicationBar_Click(object sender, EventArgs e)
{
Browser.GoBack();
}
// Navigates forward in the web browser's navigation stack, not the applications.
private void ForwardApplicationBar_Click(object sender, EventArgs e)
{
Browser.GoForward();
}
// Navigates to the initial "home" page.
private void HomeMenuItem_Click(object sender, EventArgs e)
{
Browser.Navigate(new Uri(MainUri, UriKind.Relative));
}
// Handle navigation failures.
private void Browser_NavigationFailed(object sender, System.Windows.Navigation.NavigationFailedEventArgs e)
{
MessageBox.Show("Navigation to this page failed, check your internet connection");
}
protected override void OnBackKeyPress(CancelEventArgs e)
{
base.OnBackKeyPress(e);
if (_history.Count == 0)
{
// No history, allow the back button
// Or do whatever you need to do, like navigate the application page
return;
}
// Otherwise, if this isn't the first navigation, push the current
else
{
Browser.GoBack();
}
}
private async void WebBrowser_Navigated(object sender, NavigationEventArgs e)
{
// If we navigated back, pop the last entry
if (_history.Count > 0 && _history.Peek() == e.Uri)
{
_history.Pop();
}
// Otherwise, if this isn't the first navigation, push the current
else if (_current != null)
{
_history.Push(_current);
}
// The current page is now the one we've navigated to
_current = e.Uri;
}
}
}
答案 0 :(得分:11)
您需要在应用程序页面中覆盖OnBackKeyPress,并处理WebBrowser控件导航回上一页。
假设您正在使用C#,这里大概是如何做到的(将WebBrowser_Navigated连接到您的WebBrowser的Navigated事件):
private Stack<Uri> _history = new Stack<Uri>();
private Uri _current = null;
protected override void OnBackKeyPress(CancelEventArgs e)
{
base.OnBackKeyPress(e);
if (_history.Count == 0)
{
// No history, allow the back button
// Or do whatever you need to do, like navigate the application page
return;
}
// Cancel the back button press
e.Cancel = true;
// Navigate to the last page
Browser.Navigate(_history.Peek());
}
private async void WebBrowser_Navigated(object sender, NavigationEventArgs e)
{
// If we navigated back, pop the last entry
if (_history.Count > 0 && _history.Peek() == e.Uri)
{
_history.Pop();
}
// Otherwise, if this isn't the first navigation, push the current
else if (_current != null)
{
_history.Push(_current);
}
// The current page is now the one we've navigated to
_current = e.Uri;
}
答案 1 :(得分:3)
这对我有用, 你可以检查一下browser.CanGoBack() 如果是真的那么回去别的就回来了
protected override void OnBackKeyPress(CancelEventArgs e) {
base.OnBackKeyPress(e);
if (browser.CanGoBack)
{
e.Cancel = true;
browser.GoBack();
}
else {
return;
}
}