另类的 CefSharp.WPF 中文输入问题解决方案

引言

由于某个需求,需要在原有的 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);
        

相关资料

解决 CefSharp WPF控件不能使用输入法输入中文的问题

CefSharp WPF 中文输入问题解决方法