1. 程式人生 > >通過C# WinForm控件創建的WPF WIndow窗口控件無法輸入的問題

通過C# WinForm控件創建的WPF WIndow窗口控件無法輸入的問題

一次 開始 info keyboard 輸入法 .dll enable board 非模態

原文:通過WinForm控件創建的WPF 控件無法輸入的問題

今天把寫的一個WPF程序發布到別的機器上執行,發現一個比較奇怪的問題:在那個機器上用英文輸入法無法輸入數字,非要切換到中文輸入法才行;但在我的機器上卻是好好的。

最開始以為是輸入法的問題,弄了好一陣子後,終於找到了原因:雖然這個程序是個WPF程序,但為了復用之前的部分代碼,使用著一個WinForm的菜單控件,後續的子窗口都是通過這個WinForm菜單創建的。而用WinForm控件創建的WPF控件可能出現無法正確響應鍵盤事件的情況。

找到了原因後,一個常規的解決方法是:將WinForm控件換成WPF控件,如果WinForm控件比較容易替換的話用這種方式是可以一次性的解決問題的。但如果要復用之前的控件,則可以使用如下函數使能WinForm創建的窗口或使用了WinForm創建的控件的窗口。

方案1:非模態顯示(show)

引用WindowsFormsIntegration.dll

System.Windows.Forms.Integration.ElementHost.EnableModelessKeyboardInterop(winWPF);
winWPF.Show();

方案2:模態顯示(showdialog)

winWPF.ShowDialog();

相關文章: 解決Winform中彈出WPF窗體不能在文本框中輸入的問題

通過C# WinForm控件創建的WPF WIndow窗口控件無法輸入的問題