2009-10-20 33 views
2

我在一個WPF項目中工作,該項目基本上是一個實現MVVM模式的類庫項目。出於清晰的目的,我會說,我只有一個窗口,其上有一個文本框控件。在文本框控件中輸入文字的問題

現在,我將此dll添加到另一個項目,這是一個Windows窗體項目,並且我正在使用該項目的文本框控件調用窗口。在我的Windows窗體項目中,我有一個窗口,上面有一個按鈕,當我點擊它時調用WPF窗口,並且在顯示WPF窗口之前,它使得WPF窗口成爲它的子窗口,然後顯示它。

這是我使用的喊我的WPF窗口中的代碼:


MyWPFWindow wpfWin = new MyWPFWindow(); 
WindowInteropHelper helper = new WindowInteropHelper(wpfWin); 
helper.Owner = this.Handle; 
wpfWin.Show(); 

此代碼的工作好,它顯示了WPF窗口,但問題是,當我嘗試在輸入文字文本框控制我不能。 「delete」和「backspace」鍵可以工作,而且好奇的是,如果我使用ShowDialog()而不是Show(),那麼一切正常,但我不能使用ShowDialog(),因爲我需要訪問父窗口。

任何人都可以幫我弄清楚爲什麼會發生這種情況。

謝謝!

回答

7

您需要呼叫ElementHost::EnableModelessKeyboardInterop傳入您的WPF窗口實例。這會在WinForms消息循環中安裝一個消息過濾器,它將所有輸入轉發到WPF窗口處於活動狀態。

因此,這裏是你的最終代碼應該是什麼樣子:

MyWPFWindow wpfWin = new MyWPFWindow(); 

WindowInteropHelper helper = new WindowInteropHelper(wpfWin); 
helper.Owner = this.Handle; 

ElementHost.EnableModelessKeyboardInterop(wpfWindow); 

wpfWin.Show(); 
+0

它完美!非常感謝! – Vic 2009-10-21 02:37:33

相關問題