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();

 

posted on 2025-03-23 21:27  空明流光  阅读(92)  评论(0)    收藏  举报

导航