2009-10-20 62 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

相关问题