Wpf Winforms文本框获得焦点,但不';无法捕获键盘输入

Wpf Winforms文本框获得焦点,但不';无法捕获键盘输入,wpf,winforms,keyboard,focus,Wpf,Winforms,Keyboard,Focus,这让我感到困惑 我编写了一个弹出框,它由一个WinForms用户控件组成,该控件托管在WindowsFormsHost中,而WindowsFormsHost则托管在屏幕上显示的Primitives.popup中。整个应用程序都是WPF,但此控件是从以前用WinForms编写的应用程序中取消的 弹出窗口由外部事件(来自CTI服务器的来电)激活 UserControl内部是一个textbox控件。当用户在文本框中单击时,我在弹出窗口中调用Focus方法,然后在文本框中调用Focus方法。文本框获得焦

这让我感到困惑

我编写了一个弹出框,它由一个WinForms用户控件组成,该控件托管在WindowsFormsHost中,而WindowsFormsHost则托管在屏幕上显示的Primitives.popup中。整个应用程序都是WPF,但此控件是从以前用WinForms编写的应用程序中取消的

弹出窗口由外部事件(来自CTI服务器的来电)激活

UserControl内部是一个textbox控件。当用户在文本框中单击时,我在弹出窗口中调用Focus方法,然后在文本框中调用Focus方法。文本框获得焦点。我可以相当肯定这一点,因为在框中单击后会显示一个光标,而且我还有一个“GotFocus”事件处理程序,它会打印调试消息

但是,如果在传入事件发生时有另一个程序处于活动状态,则在键盘上按下的任何键都会继续转到该程序,而不是文本框。只有当用户点击我的应用程序的另一部分(即弹出窗口外的屏幕部分)使其成为活动程序,然后点击文本框时,文本框才能接收键盘输入


我希望我已经提供了足够的信息,不会让你被无数的细节所淹没。如果有其他人需要为我指出正确的方向,我很乐意提供。

因为WinForm文本框是托管的,所以将焦点设置在它上不会激活托管WPF窗口。添加一行以激活窗口

private void TextBox_Click(object sender, EventArgs e)
{
    this.Activate(); //activate the Window
    (sender as System.Windows.Forms.TextBox).Focus();
}