WPF與中文輸入法兼容性問題的解決方案

問題

我在使用WPF進行編程的時候,發現的一個最大問題就是WPF與中文輸入法的兼容性問題。編程

出現的問題大概分爲兩種:框架

  1. 程序崩潰;
  2. 沒法切換輸入法。

在筆者的環境中並未遇到過崩潰的狀況,只是後一種狀況。但我想這兩種狀況的緣由應該同樣。佈局

具體的表現爲:在WPF中的Textbox控件中輸入漢字的時候,咱們須要先切換輸入法。切換以後狀態欄顯示切換成功,而開始鍵入拼音的時候卻發現直接將拼音輸入了Textbox框中,情形好似並未切換成功。性能

並且更爲棘手的是,這種狀況並非絕對的,重啓程序和屢次切換輸入法均可能會變爲正常。spa

個人環境爲Win10 + VS2012 + WPF4.5 + QQ拼音輸入法5.1code

解決方案

因爲這個問題僅僅存在於中文輸入環境中,外國人應該沒有此問題,所以在Stack Overflow並未找到解決方案。orm

我在遇到這個問題後晾了很久都未解決,後來看到WPF中有個WindowsFormsHost控件,也就是WinForm宿主。所以我想,既然WinForm中不存在這個問題,那麼把WinFormTextbox經過此宿主來代替WPFTextbox是否能解決這個問題呢?blog

通過嘗試,發現確實能夠。具體步驟爲:圖片

1、在窗口布局中加入一個WindowsFormsHost控件,設置Name(此處爲host);class

2、用代碼在host中加入一個WinFormTextbox

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

不足

固然這種方案並非完美的,好比如下幾點:

性能、外觀不足

WPF相比WinForm的一個最大好處是界面更絢麗和流暢。使用這種方案則失去了這種好處,好在Textbox通常並不須要背景圖片或者半透明之類的特效,所以此處影響不大。

可移植性

因爲此方案混合了兩種GUI框架,所以沒法用於僅支持WPF的環境中。

相關文章
相關標籤/搜索