WPF與中文IME相容性問題的解決方案

來源:互聯網
上載者:User

標籤:

問題

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

出現的問題大概分為兩種:

  1. 程式崩潰;
  2. 無法切換IME。

在筆者的環境中並未遇到過崩潰的情況,只是後一種情況。但我想這兩種情況的原因應該一樣。

具體的表現為:在WPF中的Textbox控制項中輸入漢字的時候,我們需要先切換IME。切換之後狀態列顯示切換成功,而開始鍵入拼音的時候卻發現直接將拼音輸入了Textbox框中,情形好似並未切換成功。

而且更為棘手的是,這種情況並不是絕對的,重啟程式和多次切換IME都可能會變為正常。

我的環境為Win10 + VS2012 + WPF4.5 + QQ拼音IME5.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的環境中。

WPF與中文IME相容性問題的解決方案

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.