完全由布局组件和控件构成

也可以让这个事件在UI组件树沿着一定方向传递且路过多个中转节点

事件——路由事件

2018/1/3 16:32:35


事件路由允许源自有些成分的平地风波由另多个因素引发。
wpf把平素新闻模型晋级为可传递的信息模型。Wpf的UI是由布局组件和控件构成的树形结构,激发事件时,技术员能够采用以思想的直接事件形式让响应者来响应,也可以让那个事件在UI组件树沿着一定方向传递且经过几个换车节点,且被正好管理。

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

逻辑树

一起由布局组件和控件构成,即我们看看的代码

可视成分树

把逻辑树延伸至Template组件等第。即看看布局依旧控件的内情。能够采纳Blend,它能够解剖观看一个空中的模板(Template)。
这两棵树在“资源”的时候也会谈到。

事件

事件实际上是一个用到event关键字修饰的嘱托(Delegate)类型成员变量,事件管理器(Event
Handler)则是三个函数,A订阅了B的风浪,正是说,让B.伊芙nt与A.EventHandler关联起来。所谓事件激发,就是B.Event被调用,那时,与其涉及的A.伊芙ntHandler就能被调用。
寄托:是一个得以援引方法的对象,当成立一个信托,也就创设了四个援引方法的目的,进而能够调用那些情势。即委托能够调用它所指的措施。

直白事件模型(CLOdyssey事件模型)

不到家之处:事件的响应者与事件的具备者之间必须创立事件订阅那么些“专线”联系。(必须树立展现的点对点的订阅关系,事件的宿主必须能够一直访谈事件的响应者。
会遭遇标题:
次第运营期在容器中动态生成一组一样控件,每一种控件的一样事件都是用同多个风浪管理器来响应。
用户控件的内部事件不能够被外边所订阅。当模块划分不粗大的时候,UI建设构造的吃极其机缘比非常多,假若想让外层的容器订阅深层控件的有个别事件,就须要为每一层组件定义用于揭露内部事件的轩然大波。

路由事件(Routed Event)

路由事件的事件具备者和响应者之间从未一贯显示的订阅关系。具有者只担负激发事件,响应者则有事件的侦听器(针对某类事件侦听),借使不带有此类事件,则三番两次传递给上超级,看看有未有那个事件的侦听。
路由事件是静态字段。

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,意味着此路由事件还未管理完整,事件将凭仗其模型继续向下拍卖(即进行别的的事件管理方法)