我正致力于将Windows Phone 8应用程序移植到平板电脑,而且我遇到了WebView
API的问题。在Windows Phone 8和Windows 8.1中,WebBrowser
和WebView
控件都具有GoBack()
方法。但是,我需要我的应用程序与Windows 8兼容,其WebView
API没有这样的方法。是否存在任何人用于Windows 8应用程序的替代方案/解决方法?
答案 0 :(得分:1)
最后,我最终编写了一个WebView包装器来管理导航堆栈。这是相关代码,适合任何有兴趣的人。请注意,我只需要处理向后导航,因此我使用了Stack
。如果还需要转发导航,则将Stack
替换为List
并将其存储为当前页面的索引可能是有意义的。
public class WebViewWrapper
{
private Stack<Uri> _navigationStack;
private Uri _currentUri;
public WebView WebView { get; private set; }
public bool CanGoBack
{
get { return _navigationStack.Count > 0; }
}
public WebViewWrapper(WebView _webView)
{
_navigationStack = new Stack<Uri>();
WebView = _webView;
WebView.LoadCompleted += (object s, NavigationEventArgs e) => {
if (_currentUri != null)
{
_navigationStack.Push(_currentUri);
}
_currentUri = e.Uri;
};
}
public void GoBack()
{
if (CanGoBack)
{
_currentUri = null;
WebView.Navigate(_navigationStack.Pop());
}
}
}
使用示例如下:
// Code behind for a view called WebBrowserPage
public sealed partial class WebBrowserPage : Page
{
private WebViewWrapper _webViewWrapper;
public WebBrowserPage()
{
// webView is a WebView in the xaml with x:Name="webView"
_webViewWrapper = new WebViewWrapper(webView);
}
// Other code for navigating to a Uri specified in a ViewModel.
// Event handler for a back button press
private void BackButton_Click(object sender, RoutedEventArgs e)
{
if (_webViewWrapper.CanGoBack)
{
_webViewWrapper.GoBack();
}
else
{
// Code that executes a command in the ViewModel to leave the WebBrowserPage
}
}
}
答案 1 :(得分:0)
WinRT XAML Toolkit有一个WebBrowser
控件可以执行其中一些操作,但我没有在任何应用程序中使用它,所以我无法保证它的质量。