【发布时间】:2011-06-01 11:14:30
【问题描述】:
在 .NET 窗口窗体中,窗体具有控件集合,并且在内部所有控件都只是围绕 Microsoft Windows 提供的窗口子系统。有点类似于 MFC,它是窗口 api 的浅包装。窗体/窗口中的控件创建树结构,并且叶节点接收事件,例如MouseMove 事件将由鼠标正下方的窗口/控件接收。
但在演示框架中,微软提供了RoutedEvent,它可以有以下策略之一
- 隧道路由事件使用隧道策略,其中事件实例通过树向下路由,从根到源元素。
- 冒泡路由事件使用冒泡策略,事件实例通过树向上路由,从事件源到根。
- 直接路由事件不通过元素树路由。
我的猜测是表示框架只创建一个主窗口,并为子元素自己绘制以支持事件路由策略
现在我可以在我的正常窗口窗体中更改此策略。我想要 Tunnel 或 Bubble,目前窗口系统使用 Direct。我希望它接收 MouseEnter/MouseLeave 事件,即使它上面有控件。一种方法是全局鼠标/键盘挂钩。但假设我想避免这种情况。
【问题讨论】:
-
它可以在 WPF 中完成,我说的是 Windows 窗体以及在 Microsoft Windows 中使用 CreateWindow() API 创建的任何窗口。