我在一个 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 窗口,但问题是当我尝试在文本框控件中输入文本时,我不能。 “删除”和“退格”键确实有效,并且 奇怪的是,如果我使用 ShowDialog() 而不是 Show(),那么一切正常,但我不能使用 ShowDialog(),因为我需要访问父窗口。
谁能帮我弄清楚为什么会这样。
谢谢!
最佳答案
您需要调用ElementHost::EnableModelessKeyboardInterop传入您的 WPF 窗口实例。这会在 WinForms 消息循环中安装一个消息过滤器,当它处于事件状态时,它将所有输入转发到 WPF 窗口。
所以你的最终代码应该是这样的:
MyWPFWindow wpfWin = new MyWPFWindow ();
WindowInteropHelper helper = new WindowInteropHelper(wpfWin);
helper.Owner = this.Handle;
ElementHost.EnableModelessKeyboardInterop(wpfWindow);
wpfWin.Show();
关于wpf - 文本框控件中的文本输入问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1597655/