文本框控件中的文本输入问题

时间:2009-10-20 22:20:13

标签: wpf winforms mvvm wpf-controls

我正在使用WPF项目,它基本上是一个实现MVVM模式的类库项目。为清楚起见,我要说我只有一个窗口,上面有一个文本框控件。

现在,我将这个dll添加到另一个项目,这是一个Windows窗体项目,我正在使用此项目中的文本框控件来调用窗口。

在我的Windows窗体项目中,我有一个窗口,上面有一个按钮,当我点击它时调用WPF窗口,并且在显示WPF窗口之前,它使WPF窗口成为子窗口,然后显示它。 / p>

这是我用来调用WPF窗口的代码:


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

这段代码运行良好,它显示了WPF窗口,但问题是,当我尝试在文本框控件中输入文本时,我不能。 “删除”和“退格”键确实有效,并且 奇怪的是,如果我使用ShowDialog()而不是Show(),那么一切正常,但我不能使用ShowDialog(),因为我需要访问父窗口。

任何人都可以帮我弄清楚为什么会这样。

谢谢!

1 个答案:

答案 0 :(得分:9)

您需要在WPF窗口实例中调用ElementHost::EnableModelessKeyboardInterop。这将在WinForms消息循环中安装消息过滤器,该循环在WPF窗口处于活动状态时将所有输入转发到WPF窗口。

所以这就是你的最终代码应该是什么样的:

MyWPFWindow wpfWin = new MyWPFWindow ();

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

ElementHost.EnableModelessKeyboardInterop(wpfWindow);

wpfWin.Show();