博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
2. 路由事件 简单理解
阅读量:6407 次
发布时间:2019-06-23

本文共 1255 字,大约阅读时间需要 4 分钟。

事件——路由事件

2018/1/3 16:32:35


事件路由允许源自某个元素的事件由另一个元素引发。

wpf把直接消息模型升级为可传递的消息模型。Wpf的UI是由布局组件和控件构成的树形结构,激发事件时,程序员可以选择以传统的直接事件模式让响应者来响应,也可以让这个事件在UI组件树沿着一定方向传递且路过多个中转节点,且被恰当处理。

逻辑树(Logical Tree)与可视元素树(Visual Tree)

逻辑树

完全由布局组件和控件构成,即我们看到的代码

可视元素树

把逻辑树延伸至Template组件级别。即看到布局或者控件的细节。可以使用Blend,它可以解剖观察一个空间的模板(Template)。

这两棵树在“资源”的时候也会提及。

事件

事件实际上是一个使用event关键字修饰的委托(Delegate)类型成员变量,事件处理器(Event Handler)则是一个函数,A订阅了B的事件,就是说,让B.Event与A.EventHandler关联起来。所谓事件激发,就是B.Event被调用,这时,与其关联的A.EventHandler就会被调用。

委托:是一个可以引用方法的对象,当创建一个委托,也就创建了一个引用方法的对象,进而可以调用那个方法。即委托可以调用它所指的方法。

直接事件模型(CLR事件模型)

不完美之处:事件的响应者与事件的拥有者之间必须建立事件订阅这个“专线”联系。(必须建立显示的点对点的订阅关系,事件的宿主必须能够直接访问事件的响应者。

会遇到问题:
程序运行期在容器中动态生成一组相同控件,每个控件的同一事件都是用同一个事件处理器来响应。
用户控件的内部事件不能被外界所订阅。当模块划分很细的时候,UI组建的吃那个机会很多,如果想让外层的容器订阅深层控件的某个事件,就需要为每一层组件定义用于暴露内部事件的事件。

路由事件(Routed Event)

路由事件的事件拥有者和响应者之间没有直接显示的订阅关系。拥有者只负责激发事件,响应者则有事件的侦听器(针对某类事件侦听),如果不含有此类事件,则继续传递给上一级,看看有没有这个事件的侦听。

路由事件是静态字段。

wpf内置路由事件

例如:

...
路由事件常用的处理模型

冒泡事件:由子控件位次向父容器传递,大部分的路由事件都是冒泡事件

隧道事件:由父容器位次向其子容器、控件传递,一般PreXXX事件属性隧道事件

使用路由事件响应方法中的e.Handled = true;意味着此事件已经被处理,将不再传递,默认e.Handled的值为false,意味着此路由事件还未处理完整,事件将依据其模型继续向下处理(即执行其他的事件处理方法)

posted on
2018-01-03 16:33 阅读(
...) 评论(
...)

转载于:https://www.cnblogs.com/wsnanxixi/p/8184438.html

你可能感兴趣的文章
JDK8 类和接口的多继承
查看>>
微信小程序下拉刷新与上拉加载
查看>>
【思维导图】深入理解HTTPS原理、过程
查看>>
BCH生态建设逐步完善,商家接受度明显提高
查看>>
vue.js @慕课网
查看>>
看一下,Java面试中常被问到的几大技术难题!
查看>>
关于Redisson分布式事务锁
查看>>
Kubernetes平台的安装详解
查看>>
基于 Webpack4 的可插拔式微前端架构 - Puzzle
查看>>
每周一个前端动画之一:UC浏览器球队展示动画的实现
查看>>
看完这篇文章,我保证你也会用 RoundedBitmapDrawable 创建圆角头像
查看>>
[译] 浏览器中 CSS 支持指南
查看>>
学习2.0高仿饿了么遇到的坑-v-el指令2.0已经废弃了,要使用 ref 特殊属性。
查看>>
(JS基础)DOM:样式
查看>>
《基础入门之我的第一张驾驶舱》技巧整理
查看>>
正则表达式速查笔记
查看>>
Android View绘制流程(源码 API27)
查看>>
【译】三分钟掌握 React 高阶组件
查看>>
UHD630核显驱动方法及驱动后闪屏严重问题解决记录
查看>>
个人博客开发记录
查看>>