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

标签 wpf winforms mvvm wpf-controls

我在一个 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/

相关文章:

c# - 如何使用以编程方式创建的按钮在 WPF MVVM 中创建 OnClick 命令?

c# - 使用可观察对象使用数据库中的数据绑定(bind)更新数据网格

c# - WPF Caliburn Micro Message.Attach 未通过 HierarchicalDataTemplate 冒泡

c# - 如何找出选择了哪个按钮?

.net - 添加我自己的 WPF TriggerAction

c# - 如何在wpf中将文本框绑定(bind)到MySQL数据源

c# - 使用 EF6 连接到 DB2

c# - 直到按下 alt 键才显示模态通用对话框

C#:表单和 if 语句

c# - KeyDown 事件未触发,KeyPreview 设置为 true