【发布时间】:2012-07-12 12:06:33
【问题描述】:
我正在尝试在 WPF 中构建一个应用程序,我想在其中处理来自连接到单台计算机的多个键盘的输入(KeyPress 事件)。所以,我有一个类,我在其中重写 WndProc() 方法,并且能够接收来自不同键盘设备的输入。在执行此操作时,我使用 MainWindow 句柄注册此类,因此窗口可以接收 CLR 键盘事件。但这不是问题。
问题是我现在正在 WPF 中开发UserControl,它也可以响应这些多键盘事件。这些UserControls 将在同一个窗口中实例化,但我正在考虑通过接口发送事件(尤其是RoutedEvents)。因此,我的自定义 UserControl 类只是实现了接口,我很高兴。
你们知道如何做到这一点吗,我对 WPF 真的很陌生,所以我遇到了一些困难。
提前致谢!!!
【问题讨论】:
-
为什么要添加额外的接口步骤来“发送”事件。只需像往常一样将侦听器附加到它们。
-
因为在这种情况下,我的 UserControl 类必须知道 KeyboardManager 类实例(实际上是引发所有键盘事件),并且此 KeyboardManager 在 MainWindow 中被实例化。
-
您的用户控件必须以一种或另一种方式挂钩到事件。此外,根据您的描述,所有内容(用户控件、键盘管理器等)都在同一个窗口中,因此您的控件与管理器处于同一范围内。除非您有更宏大的计划,否则只需将其连接起来并完成它。
-
是的,我实际上可以这样做,因为这个 KeyboardManager 实例在同一个范围内。但为了保持分离和清洁,我决定采用界面方式。
-
无论如何我已经实现了一个 CLR 事件,它通知我的自定义 UserControl 类的键盘事件,我可以这样做,因为我确切地知道每个键盘设备的输入焦点(用户控件)是什么,并且使用这个想法,我实际上可以在我想调用的确切类中调用接口方法。无论如何感谢 A.R.为您的建议。
标签: c# wpf routed-events