由于某个需求,需要在原有的 WPF 程序上内嵌浏览器,最终选定 CefSharp.WPF , 但是还是有不少的问题影响着使用体验,比如:最开始遇到的不能输入中文、能输入中文了输入法候选框或右键菜单却跑到屏幕左上角,使用搜狗等第三方输入法不能输入等等。
Google 上逛了很久,也试了很多方法,最后发现一个最简单好用的方案是借用 WinForm 控件。
新建一个 .Net 4.5.2 以上的 WinForm 程序,修改输出类型为“类库”,然后通过 NuGet 下载最新的 CefSharp.WinForms
, 新建一个用户控件 CefControl
, 添加命名空间:
using CefSharp; using CefSharp.WinForms;
添加如下代码:
public partial class CefControl : UserControl { ChromiumWebBrowser Default; public CefControl(string url) { InitializeComponent(); if (!Cef.IsInitialized) Cef.Initialize(); Default = new ChromiumWebBrowser(url); // Add it to the form and fill it to the form window. this.Controls.Add(Default); Default.Dock = DockStyle.Fill; } public static void Shutdown() { if (Cef.IsInitialized) Cef.Shutdown(); } }
在 WPF 项目中使用:
<WindowsFormsHost> <wflib:CefControl/> </WindowsFormsHost>
或:
WindowsFormsHost browser = new WindowsFormsHost(); browser.Child = new CefControl(url);