Wpf的UI是由布局组件和控件构成的树形结构

事件——路由事件

2018/1/3 16:32:35


事件路由允许源自某些成分的平地风波由另一个成分引发。
wpf把一贯音讯模型升级为可传递的消息模型。Wpf的UI是由布局组件和控件构成的树形结构,激发事件时,程序猿能够选拔以思想的间接事件情势让响应者来响应,也能够让那么些事件在UI组件树沿着一定方向传递且经过八个换车节点,且被正好管理。

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

逻辑树

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

可视成分树

把逻辑树延伸至Template组件等第。即看看布局仍旧控件的细节。能够运用Blend,它能够解剖观望三个空间的沙盘(Template)。
这两棵树在“能源”的时候也会聊到。

事件

事件其实是叁个应用event关键字修饰的信托(Delegate)类型成员变量,事件处理器(伊夫nt
Handler)则是三个函数,A订阅了B的事件,正是说,让B.Event与A.EventHandler关联起来。所谓事件激发,正是B.伊夫nt被调用,那时,与其关系的A.EventHandler就能够被调用。
信托:是四个方可援引方法的靶子,当创造贰个寄托,也就创办了贰个援用方法的对象,进而能够调用那几个方式。即委托能够调用它所指的主意。

一贯事件模型(CLGL450事件模型)

不全面之处:事件的响应者与事件的具有者之间必须建设构造事件订阅这一个“专线”联系。(必得树立展现的点对点的订阅关系,事件的宿主必须能够一贯采访事件的响应者。
会遇见标题:
前后相继运维期在容器中动态生成一组一样控件,每一种控件的一样事件都是用同四个事件管理器来响应。
客户控件的中间事件不可能被外面所订阅。当模块划分不粗大的时候,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,意味着此路由事件还未管理完整,事件将依靠其模型继续向下拍卖(即试行别的的事件处理方法)

相关文章