我在使用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的環境中。