問題
我在使用WPF進行編程的時候,發現的一個最大問題就是WPF與中文輸入法的兼容性問題。
出現的問題大概分為兩種:
- 程序崩潰;
- 無法切換輸入法。
在筆者的環境中並未遇到過崩潰的情況,只是后一種情況。但我想這兩種情況的原因應該一樣。
具體的表現為:在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的環境中。