我在使用WPF进行编程的时候,发现的一个最大问题就是WPF与中文输入法的兼容性问题。编程
出现的问题大概分为两种:框架
在笔者的环境中并未遇到过崩溃的状况,只是后一种状况。但我想这两种状况的缘由应该同样。布局
具体的表现为:在WPF中的Textbox控件中输入汉字的时候,咱们须要先切换输入法。切换以后状态栏显示切换成功,而开始键入拼音的时候却发现直接将拼音输入了Textbox框中,情形好似并未切换成功。性能
并且更为棘手的是,这种状况并非绝对的,重启程序和屡次切换输入法均可能会变为正常。spa
个人环境为Win10 + VS2012 + WPF4.5 + QQ拼音输入法5.1code
因为这个问题仅仅存在于中文输入环境中,外国人应该没有此问题,所以在Stack Overflow并未找到解决方案。orm
我在遇到这个问题后晾了很久都未解决,后来看到WPF中有个WindowsFormsHost控件,也就是WinForm宿主。所以我想,既然WinForm中不存在这个问题,那么把WinForm的Textbox经过此宿主来代替WPF的Textbox是否能解决这个问题呢?blog
通过尝试,发现确实能够。具体步骤为:图片
1、在窗口布局中加入一个WindowsFormsHost控件,设置Name(此处为host);class
2、用代码在host中加入一个WinForm的Textbox:
host.Child = new System.Windows.Forms.TextBox();
固然这种方案并非完美的,好比如下几点:
WPF相比WinForm的一个最大好处是界面更绚丽和流畅。使用这种方案则失去了这种好处,好在Textbox通常并不须要背景图片或者半透明之类的特效,所以此处影响不大。
因为此方案混合了两种GUI框架,所以没法用于仅支持WPF的环境中。