wpf webview2 大坑
最大的坑:没有任何控件可以显示在 WebView2 控件之上,就算显示在那儿了,事件也可以响应,但绝对看不见,WebView2 控件都给你刷新成网页视觉内容了。
官方建议使用 wpf WebView2CompositionControl 替代,确实解决了上述 bug。没深入研究,但一启动网页右键上下文菜单那质量,我就知道这个不太行。
根据网上查到的信息,说这个比较底层,自己要实现很多东西,看自己选择吧。
用这东西第一步,一般会报如下的错:
System.IO.FileNotFoundException: Could not load file or assembly 'Microsoft.Windows.SDK.NET, 将最低支持的操作系统选为 windows 10 就好了,我的默认是 Windows7
别一个解决方案就是在 wpf 中使用 winform.WebView2 控件,然后使用混合编程让 WPF 控件显示在 WebView2 之上。
这是一个示例:
// 添加一个 winform Panel 到 wpf grid var panel = new System.Windows.Forms.Panel() { BackColor = System.Drawing.Color.Red }; var winformHost = new System.Windows.Forms.Integration.WindowsFormsHost(); winformHost.Visibility = Visibility.Visible; winformHost.Child = panel; gridMain.Children.Add(winformHost); // 添加 Webview2 控件到 Panel var webView = new Microsoft.Web.WebView2.WinForms.WebView2() { Dock = DockStyle.Fill }; panel.Controls.Add(webView); await webView.EnsureCoreWebView2Async(); var uri = new Uri("https://www.baidu.com"); var webResourceRequest = webView.CoreWebView2.Environment.CreateWebResourceRequest(uri.AbsoluteUri, "GET", null, "\r\n"); webView.CoreWebView2.NavigateWithWebResourceRequest(webResourceRequest); // 添加一个 wpf 按钮到 Panel var wpfHost = new System.Windows.Forms.Integration.ElementHost() { Width = 300, Height = 300 }; wpfHost.Anchor = AnchorStyles.Left | AnchorStyles.Bottom; wpfHost.Left = 0; wpfHost.Top = panel.Height - wpfHost.Height; wpfHost.Child = new System.Windows.Controls.Button() { Content = "我是一个 WPF 按钮" }; panel.Controls.Add(wpfHost); wpfHost.Show(); wpfHost.BringToFront();
桂棹兮兰桨,击空明兮溯流光。