消息封装成事件模型后得到简化,只需关注事件的拥有者、响应者、订阅关系(如A订阅了B的事件,即 B.Event 和 A.EventHandler 存在绑定关系),本质上是一个用 event 关键字修饰了的委托实例。
在CLR直接事件模型中,事件的拥有者就是消息的发送者。
路由事件是WPF提供的事件机制,用于弥补直接事件的以下缺陷
路由事件的拥有者和响应者之间没用显示订阅关系,订阅者只负责激发事件,由响应者决定要侦听的事件。
WPF中的事件大多为可路由事件,
此外还有自定义路由事件,可自定义冒泡方式(气泡、隧道和直接)。
由事件的触发源控制接收者如何进行工作,默认左单击为执行命令的时机。
1,,你定义了一个复杂的控件模板(比如Button的), 里面包含了很多的Lable等其他控件。2,注册这个Button的鼠标单击事件
3,鼠标单击这个Button(鼠标单击的是这个Button中的Label控件)
4,你的事件被触发了
思考:鼠标单击的是Button控件模板中的Label,触发的是这个Label的单击事件,为什么你注册的事件能触发? 这个就是路由事件的具体应用和意义
Click可以变通使用MouseLeftButtonUp事件如果一定要添加Click,需要通过自定义路由事件,然后通过MouseLeftButtonUp方法中触发Click事件
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)