WPF中存在一种路由事件(routed event)。标准的.NET事件会被显式订阅该事件的代码处理,且只发送到这些订阅者那里。路由事件的不同之处在于,可将事件发送到包含该控件所在层次的所有控件。
当路由事件发生时.它会向发生该事件的控件的上层与下层控件传递。也就是说,如果右击了某个按钮,会首先将MouseRightButtonDown事件发送给该按钮本身,然后发送给该控件的父控件,在之前的示例中,就是Grid控件。如果Grid控件未处理该事件,该事件会最终传递给窗口。如果不希望该事件被继续传往更高的控件层次,只需要将RoutedEventArgs的属性Handled设置为true即可,此时不会再发生其他调用。当某个事件像这样往上层传递时,就称其为冒泡事件(bubblingevent)。
路由事件也可以往其他方向传递,例如从根元素传往执行操作的控件。这样的事件被称为下钻事件(tunneling event),并且按照约定,所有这类事件都应该加上Preview前缀,井且总是在相应的冒泡事件之前发生。PreviewMouseRightButtonDovvn 事件就属于这一类。
最后需要说明的是,路由事件的行为也可以和标准的.NET事件一样,只发送给执行操作的控件。
已有 22658 名学员学习以下课程通过考试
最需教育客户端 软件问题一手掌握
去 App Store 免费下载 iOS 客户端
点击加载更多评论>>