2011-01-14 73 views
0

我在我的WPF应用程序中嵌入了Acrobat Reader,并且我定义了几个热键,我想要做一些工作,但热键仅在我处于文本框和类似内部时才起作用。我发现这一定是因为Adobe Acrobat Reader在我之前得到了热键,因为如果我将ctrl-shift-s映射到一个函数,当我在文本框中按下它时,我的函数被调用,但是如果焦点不在一个文本框,Adobe的保存功能被调用。WPF:组件干扰热键

我怎样才能确保我为MainWindow定义的热键是被执行的热键,而不是Acrobat Reader或其他的?

干杯

回答

1

这听起来像键盘焦点在应用程序中默认为嵌入式Acrobat Reader软件,所以当你的主窗口中的任何偏好得到一个按键也给了他们阅读器一样,包括它自己的菜单命令。

这有点难度,因为你可能读者接受焦点和处理其键盘快捷键 - 只是不是那些也是由您的主窗口定义的。

尝试覆盖MainWindow类中的OnKeyDown,并查看Ctrl + Shift + S是否到达那里。如果是这样,通过直接调用适当的命令事件处理程序进行响应,并在事件参数上将Handled设置为true,以防止MainWindow在其他任何地方发送该密钥。

+0

这听起来很有趣。我不需要Acrobat Reader中的键盘快捷键,我只会用它来查看单个页面,并且可能会复制一些OCR文本。 (好的,所以我想我需要ctrl-c,但就是这样:-))有没有办法让我的应用程序先处理键盘,获得键盘焦点,然后将它留给Acrobat,如果我没有回应?感谢OnKeyDown的提示,我会用它来检查。 :-) – niklassaers 2011-01-15 17:48:53