我已经实施了一个UserControl
. 然后我想处理一个最初由Window
(键盘按下)处理的事件。路由另一个组件(组件树中较高)捕获的事件的最佳方法是什么?
提前感谢您的回复和提示!
干杯
我已经实施了一个UserControl
. 然后我想处理一个最初由Window
(键盘按下)处理的事件。路由另一个组件(组件树中较高)捕获的事件的最佳方法是什么?
提前感谢您的回复和提示!
干杯
这取决于您尝试访问的事件。如果它是一个 Preview 事件并且 Window 将 e.Handled 设置为 true,您将需要使用 Alex 建议的方法来规避 Window 对隧道的处理。如果它是一个冒泡事件(即 KeyDown),那么您不需要做任何特别的事情,因为冒泡事件首先会在子元素上触发处理程序并上升到可视化树,因此 Window 处理程序在您的 UC 之后才会发生。
使用 Key 事件时需要注意的一件事是,如果 Focus 位于其上或内部,则该事件只会首先被您的 UC 拾取。这不是您需要担心鼠标事件之类的事情,因为它们从树中的特定位置开始。
我相信你不能保证这一点。
Window
类包装 Win32 基于消息的事件模型,这将是唯一可以访问这些信息的 WPF 实体。
我建议您创建一个附加属性(将由 使用Window
)并自己实现事件的路由,以便控件可以订阅。
您可以附加路由处理程序,指定您也想处理已处理的消息:
this.AddHandler(routedEvent, handler, true);
this
UIElement 或派生类在哪里。
但是,可能仍然有一些事件(在这种情况下是按键)无法通过窗口,不确定。