【问题标题】:WPF + XNA: WPF TextBox not handling key inputsWPF + XNA:WPF 文本框不处理键输入
【发布时间】:2012-01-10 15:33:58
【问题描述】:

我正在尝试使用 WPF 窗口中的 WindowsFormsHost 控件将 XNA 集成到 WPF 窗口中。我有一个非常奇怪的问题,每当 XNA 运行时,我的 WPF 窗口控件的键盘输入都不起作用。更奇怪的是,并非所有键都发生这种情况。它发生在所有字母和数字上,但是,例如,退格键或删除键工作。我首先认为这是由于 XNA 连接到键盘输入并处理所有按键,并且事件没有被路由到我的 WPF 窗口。但奇怪的是,它们确实由 OnKeyDown 处理。我创建了一个从普通 TextBox 派生的自定义 TextBox 类,覆盖了 OnKeyDown,在其中放置了一个断点,并且它起作用了。调试器踩到断点。所以我错了:XNA 没有阻止关键事件到达 WPF 窗口(或其控件),我的 TextBox 得到了正确的键盘事件,但它不起作用。我在键盘上按“A”,调用 OnKeyDown,但它不会将“A”附加到文本框中。另一方面,退格键正常工作。我使用鼠标右键单击将一些文本复制粘贴到字段中,然后单击文本的中间(箭头也不起作用),我可以通过按退格键删除文本,但我无法输入任何内容。

可能是什么原因?我对 WPF 的输入处理不是很擅长,但通常,如果我的 TextBox 确实收到 OnKeyDown 事件(使用正确的参数),它应该附加我按下的字母。一旦我结束 XNA 游戏,事情就会开始正常运行。控件行为异常的原因可能是什么?

【问题讨论】:

    标签: wpf xna keyboard-events


    【解决方案1】:

    其他人在这里遇到了同样的问题:http://forums.create.msdn.com/forums/p/98145/584961.aspx,他们找到了问题的解决方案(他们也链接到了这个问题)

    XNA 和 WPF 的互操作性需要稍作调整:

    System.Windows.Forms.Integration.ElementHost.EnableModelessKeyboardInterop(this);

    此代码应粘贴到将托管 XNA 内容的 WPF 窗口的构造函数中。我已经在InitializeComponent() 之后将它粘贴到构造函数中并且它起作用了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-25
      相关资源
      最近更新 更多