【问题标题】:CefSharp ChromiumWebBrowser control is not obeying InputLanguage.CurrentInputLanguage propertyCefSharp ChromiumWebBrowser 控件不遵守 InputLanguage.CurrentInputLanguage 属性
【发布时间】:2019-10-27 20:23:36
【问题描述】:

使用 CefSharp 75.1.142,我开发了一个 C# Winforms 应用程序。它有一个 SplitContainer splitContainer1,顶部面板有一个 ComboBox combobox1,底部面板有 ChromiumWebBrowser 控件。

我有具有英语和希腊语键盘布局的 Windows 7(默认为英语)。在初始化期间,我将应用程序的输入语言更改为希腊语并添加 ChromiumWebBrowser 控件,如下所示:

InputLanguage.CurrentInputLanguage = InputLanguage.FromCulture(new System.Globalization.CultureInfo("el-gr"));
ChromiumWebBrowser browser = new ChromiumWebBrowser(comboBox1.SelectedValue.ToString());
this.splitContainer1.Panel2.Controls.Add(browser);

但是,虽然应用程序的输入语言发生了变化,但浏览器控件仍然具有我系统的默认输入,即英语。 如果我点击组合框,Windows 7 的语言栏显示希腊语,当我点击浏览器控件时,语言栏显示英语。

如何更改浏览器控制的输入语言?

【问题讨论】:

  • 这个post可以帮助。
  • 不幸的是,它没有用。会不会与 CefSharp.BrowserSubprocess.exe 或 CefSharp 的 UI 线程有关?我正在更改整个应用程序的输入语言,但 CefSharp 忽略了它。
  • 是的,这可能是原因,显然它使用了不同的过程。

标签: c# winforms cefsharp chromium-embedded


【解决方案1】:

我通过使用IsBrowserInitializedChanged 事件解决了这个问题,因为根据文档:

在底层 CEF 浏览器实例被调用后调用的事件 创建的。请务必注意,此事件是在 CEF UI 上触发的 线程,默认情况下与您的应用程序 UI 不同 线程。

所以,我用了:

browser.IsBrowserInitializedChanged += OnIsBrowserInitializedChanged;
private void OnIsBrowserInitializedChanged(object sender, EventArgs e)
{
  InputLanguage.CurrentInputLanguage = InputLanguage.FromCulture(new System.Globalization.CultureInfo("el-gr"));
}

【讨论】:

    猜你喜欢
    • 2014-12-19
    • 1970-01-01
    • 2013-06-09
    • 2011-04-30
    • 2011-09-18
    • 1970-01-01
    • 2015-11-10
    • 2020-06-08
    • 2013-07-08
    相关资源
    最近更新 更多