简轻便单明白

事件——路由事件

2018/1/3 16:32:35


事件路由允许源自有个别成分的风浪由另三个成分引发。
wpf把一贯新闻模型升级为可传递的音讯模型。Wpf的UI是由布局组件和控件构成的树形结构,激发事件时,工程师能够挑选以观念的平昔事件格局让响应者来响应,也得以让那些事件在UI组件树沿着一定方向传递且经过多少个换车节点,且被正好管理。

逻辑树(Logical Tree)与可视成分树(Visual Tree)

逻辑树

统统由布局组件和控件构成,即大家看来的代码

可视成分树

把逻辑树延伸至Template组件等级。即看看布局依然控件的内情。能够采用Blend,它能够解剖旁观二个空间的模版(Template)。
这两棵树在“财富”的时候也会提及。

事件

事件实际是叁个选拔event关键字修饰的嘱托(Delegate)类型成员变量,事件管理器(伊芙nt
Handler)则是二个函数,A订阅了B的事件,正是说,让B.伊夫nt与A.伊夫ntHandler关联起来。所谓事件激发,就是B.伊芙nt被调用,那时,与其关联的A.伊夫ntHandler就能够被调用。
信托:是三个足以引用方法的靶子,当创造三个寄托,也就制造了一个引用方法的对象,进而能够调用那一个情势。即委托能够调用它所指的方法。

一直事件模型(CL本田CR-V事件模型)

不健全之处:事件的响应者与事件的具有者之间必须树立事件订阅那几个“专线”联系。(必须建构展现的点对点的订阅关系,事件的宿主必须能够直接待上访问事件的响应者。
会遇上难题:
先后运营期在容器中动态生成一组同样控件,每种控件的等同事件都是用同三个轩然大波管理器来响应。
用户控件的个中事件不可能被外面所订阅。当模块划分异常细的时候,UI创设的吃那多少个机会许多,尽管想让外层的器皿订阅深层控件的某部事件,就需求为每一层组件定义用于揭露内部事件的风云。

路由事件(Routed 伊夫nt)

路由事件的轩然大波具有者和响应者之间未有直接显示的订阅关系。具备者只承担激发事件,响应者则有事件的侦听器(针对某类事件侦听),假设不含有此类事件,则继续传递给上一级,看看有未有那么些事件的侦听。
路由事件是静态字段。

wpf内置路由事件

例如:

 <Grid x:Name="grudRoot" Background="Lime" Button.Click="ButtonClick">
    <Button x:Name="Btn" Background="AliceBlue".../>  <!--此处没有bttonclick事件,向上级寻找,找到了就调用-->
    ...
</Grid>
路由事件常用的拍卖模型

冒泡事件:由子控件位次向父容器传递,大部分的路由事件都以冒泡事件
隧道事件:由父容器位次向其子容器、控件传递,一般PreXXX事件性质隧道事件

行使路由事件响应措施中的e.Handled =
true;意味着此事件已经被管理,将不再传递,暗许e.Handled的值为false,意味着此路由事件还未管理完整,事件将依照其模型继续向下管理(即实践其它的事件处理方法)