WPF与中文输入法兼容性问题的解决方案

问题

我在使用WPF进行编程的时候,发现的一个最大问题就是WPF与中文输入法的兼容性问题。

出现的问题大概分为两种:

  1. 程序崩溃;
  2. 无法切换输入法。

在笔者的环境中并未遇到过崩溃的情况,只是后一种情况。但我想这两种情况的原因应该一样。

具体的表现为:在WPF中的Textbox控件中输入汉字的时候,我们需要先切换输入法。切换之后状态栏显示切换成功,而开始键入拼音的时候却发现直接将拼音输入了Textbox框中,情形好似并未切换成功。

而且更为棘手的是,这种情况并不是绝对的,重启程序和多次切换输入法都可能会变为正常。

我的环境为Win10 + VS2012 + WPF4.5 + QQ拼音输入法5.1

解决方案

由于这个问题仅仅存在于中文输入环境中,外国人应该没有此问题,因此在Stack Overflow并未找到解决方案。

我在遇到这个问题后晾了好久都未解决,后来看到WPF中有个WindowsFormsHost控件,也就是WinForm宿主。因此我想,既然WinForm中不存在这个问题,那么把WinForm的Textbox通过此宿主来代替WPF的Textbox是否能解决这个问题呢?

经过尝试,发现确实可以。具体步骤为:

1、在窗口布局中加入一个WindowsFormsHost控件,设置Name(此处为host);

2、用代码在host中加入一个WinForm的Textbox:

host.Child = new System.Windows.Forms.TextBox();

不足

当然这种方案并不是完美的,比如以下几点:

性能、外观不足

WPF相比WinForm的一个最大好处是界面更绚丽和流畅。使用这种方案则失去了这种好处,好在Textbox一般并不需要背景图片或者半透明之类的特效,因此此处影响不大。

可移植性

由于此方案混合了两种GUI框架,因此无法用于仅支持WPF的环境中。

时间: 2024-10-18 11:30:33

WPF与中文输入法兼容性问题的解决方案的相关文章

中文输入法在vs2010中失效解决方案

这样你就可以用切换输入法的方式,输入中文咯. 后来用了2次发现还是有问题,后来我就直接把输入法的切换改成ctrl+1,后来使用就一直没有问题.总之,解决方案视具体情况解决.中文输入法在vs2010中失效解决方案

Ubuntu中sublime和Foxit Reader不能使用中文输入法解决方案

虽然Ubuntu下面很多软件同windows下一样,但是经常会出现各种各样的小问题,其中最让人头疼的是软件中的输入法问题. sublime作为一个跨平台的编辑软件,可以支持win,linux和mac系统,非常好用,但是在安装sougou输入法之后,使用sublime打开文件后并不能输入中文. sublime使用以下方法进行修复中文输入法问题: 原帖见: 解决Ubuntu下Sublime Text 3无法输入中文 其中作者推荐的第一种方法就可以完美解决我的问题,也推荐大家先尝试第一种方法来进行解决

转载--经验总结:应对中文输入法的字符串截断方案(带代码示例)

本文转自:http://www.cnblogs.com/chyingp/p/3599641.html 遇到这么个需求,允许用户修改自己的名片,名片最大长度支持8个汉字(24个字节),当用户输入超过8个汉字,则不允许用户继续输入. 最初的思路:oninput你好 很常见的需求,觉得驾轻就熟,监听input事件,当输入内容发生变化的时候,获得用户输入内容,并进行截断操作(如果超出的话).主要代码如下.一切显得那么美好,直到中文输入法出现. ps:本文用例均在 chrome 版本 33.0.1750.

Ubuntu14.04安装中文输入法以及解决Gedit中文乱码问题

1 设置中文显示环境 1. 打开System Settings 2. 打开Personal-> Language Support. 会弹出如下对话框,提示你“语言支持没安装完整”. 点击“Remind Me Later”. 3. 在“Language Support”中,点击“Install/Remove Languages”,在打开的窗口中,找到“Chinese(simplified)”并勾选上,点击“Apply Changes”. 4. 上面只是下载了语言包,还需要切换系统语言才能使之生效.

linux下中文输入法的安装

今天,在LinuxSLC5.3上安装了中文输入法,过程如下:原文出自[比特网],转载请保留原文链接:http://soft.chinabyte.com/os/102/11459102.shtml 1.安装中文字体库 yum install "font-chinese" 2.安装scim输入法 yum install "scim*" 3.安装scim-lang-chinese,scim-pinyin yum install scim-lang-chinese scim

Centos6.5安装中文支持和中文输入法

 先来讲中文支持:    之前在网上查了不少资料,很多网友在网上都说,在shell命令下输入: # vi /etc/sysconfig/i18n 然后修改LANG="en_US.UTF-8"为LANG="zh_CN.UTF-8"保存,重启系统即可,后来自己试了很多遍,只在系统登录界面的用户名和密码改成了中文,进入系统桌面后发现还是无法解决系统的中文支持问题.然后终于在51cto中找到了一种解决方案:    由于locale的优先级要高于i18n,在i18n中的LAN

android emulator 安装中文输入法

android emulator 模拟器内置没有中文输入法,有些情况下我们需要输入正文就比较麻烦. 在模拟器的浏览器中下载输入法然后安装,会提示系统不兼容的情况. 这是由于Android应用多基于ARM处理器,与我选择的Intel Atom(x86)不同,因此导致兼容性问题. 解决办法:下载搜狗输入法X86版 http://www.lenovomm.com/appdetail/com.sohu.inputmethod.sogou.x86/0 我是下载到电脑E盘更目录下,在android emul

移动端、手机网站中文输入法下keyup事件部分按键无效

微信公众平台开发时,客户提需求"输入框中输入内容时,输入框后边显示清除按钮,清除输入框中的内容",使用"keyup"事件时在中文输入法下部分按键keyup事件无效, 以下为解决方案. 绑定"input"和"propertychange"事件可以解决,以下为代码: var bind_name="input";//定义所要绑定的事件名称 if(navigator.userAgent.indexOf("

[Linux kali] Kali KDE桌面安装中文输入法 不能登录系统

#开始 第一次实体机上面安装kali的KDE桌面版本 结果就遇到了很多的BUG 比如这次就是安装中文输入法有问题 这次安装的是fcitx框架的 尝试了 谷歌输入法 还有搜狗输入法 都有这个问题 也就是安装完了之后 重启会不能登录 具体情况是屏幕左上角会话那个下拉框里面没有选项 输入密码之后不能登录 (没有反应) 但是在切换了tty之后(命令行界面) 之后就能登录成功(所以我觉得有可能是桌面和fcitx框架有兼容性的问题....) 总共作系统做了5次 最终放弃了 我都快放弃了这个桌面了 就是下载X