我正在开发一款windows phone 8.1通用应用程序。我正在提取一个提要,然后将其显示在列表框中。提要中的每个项目都会将您带到一个网页。当有人单击列表框视图页中的某个项目时,我正在使用WebView控件来显示网页的内容。我可以在WebView控件中显示网页,但当我按下硬件后退按钮时,它会将我带回到主页(从那里开始),而不是列表框视图页。如何返回列表框视图页面,以便用户可以单击另一个项目在WebView控件中查看该项目?
这是我的XAML:
<WebView Grid.Row="0" Name="webBrowser1" Visibility="Collapsed" Width="auto" Height="auto" Grid.RowSpan="2" NavigationCompleted="Mywebbrowser_LoadCompleted"/>
这是我在列表框视图页面上选择的更改代码,它将用户带到webview控件中的网页:
private void SearchListBox_SelectionChanged(对象发送方,SelectionChangedEventArgs e){ListBox-ListBox=发件人为ListBox;
if (listBox != null && listBox.SelectedItem != null)
{
// Get the item that was tapped.
SearchListItem sItem = (SearchListItem)listBox.SelectedItem;
// Set up the page navigation only if a link actually exists in the feed item.
if (sItem.Url.Length > 0)
{
// Get the associated URI of the feed item.
Uri site = new Uri(sItem.Url.Replace("https", "http"));
//Set up the app bar once the feed items are displayed in the web browser control
//appbar();
// Show the progress bar.....
mycontrols.progressbarShow(pgbar, pgText);
//appbar_eh.appbarNoShow(ApplicationBar);
//mycontrols_eh.progressbarShow(pgbar, pgText);
webBrowser1.Visibility = Windows.UI.Xaml.Visibility.Visible;
webBrowser1.Source = site;
}
}
}
编辑添加BackPressed处理程序:
void HardwareButtons_BackPressed(object sender, Windows.Phone.UI.Input.BackPressedEventArgs e)
{
Frame frame = Window.Current.Content as Frame;
if (frame == null)
{
return;
}
if (frame.CanGoBack)
{
frame.GoBack();
e.Handled = true;
webBrowser1.Visibility = Windows.UI.Xaml.Visibility.Collapsed;
}
}
谢谢!
您当前如何处理HardwareButton.BackPressed事件?
由于它会返回到您的主页,而不是退出应用程序,因此您必须有一些处理程序(直接或通过库代码)。如果WebView处于打开状态而不是执行正常导航,则需要修改该代码以隐藏它。
如果使用NavigationHelper函数,则可以覆盖GoBack命令来执行此操作。
编辑:根据您添加的示例代码,这里有一种可能的方法。基本想法是关闭WebView,而不是调用Frame.GoBack,而不是同时执行这两个操作。Frame.GoBack调用会返回,所以如果你不想导航,就不要调用它。
void HardwareButtons_BackPressed(object sender, Windows.Phone.UI.Input.BackPressedEventArgs e)
{
Frame frame = Window.Current.Content as Frame;
if (frame == null)
{
return;
}
// Depending on the app there may be higher level state than
// directly checking the Visibility property
if (webBrowser1.Visibility == Windows.UI.Xaml.Visibility.Visible)
{
// If webBrowser is open then close it rather than
// navigating to the previous page
webBrowser1.Visibility = Windows.UI.Xaml.Visibility.Collapsed;
e.Handled = true;
}
else if (frame.CanGoBack)
{
frame.GoBack();
e.Handled = true;
}
}