路由事件,轻易理解

事件——路由事件

事件——路由事件

2018/1/3 16:32:35


事件路由允许源自有个别成分的轩然大波由另三个成分引发。
wpf把直接新闻模型进级为可传递的新闻模型。Wpf的UI是由布局组件和控件构成的树形结构,激发事件时,程序员能够选用以古板的直白事件情势让响应者来响应,也足以让那些事件在UI组件树沿着一定方向传递且经过三个换车节点,且被稳妥处理。

2018/1/3 16:32:35


事件路由允许源自某些成分的轩然大波由另3个因素引发。
wpf把平素音信模型晋级为可传递的新闻模型。Wpf的UI是由布局组件和控件构成的树形结构,激发事件时,程序员能够选择以观念的直白事件情势让响应者来响应,也能够让那些事件在UI组件树沿着一定方向传递且经过八个换车节点,且被安妥处理。

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

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

逻辑树

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

逻辑树

全然由布局组件和控件构成,即大家看出的代码

可视成分树

把逻辑树延伸至Template组件等级。即看看布局还是控件的底细。能够选用Blend,它能够解剖阅览3个上空的模版(Template)。
那两棵树在“财富”的时候也会聊起。

可视成分树

把逻辑树延伸至Template组件等级。即看看布局依然控件的细节。能够行使Blend,它能够解剖阅览三个上空的模板(Template)。
那两棵树在“能源”的时候也会提起。

事件

事件实际是一个施用event关键字修饰的信托(Delegate)类型成员变量,事件处理器(伊夫nt
Handler)则是三个函数,A订阅了B的风浪,就是说,让B.伊夫nt与A.伊芙ntHandler关联起来。所谓事件激发,便是B.Event被调用,那时,与其关系的A.伊夫ntHandler就会被调用。
信托:是叁个方可引用方法的靶子,当创设二个委托,也就创办了2个引用方法的目的,进而能够调用那2个格局。即委托能够调用它所指的不二等秘书技。

事件

事件实际是一个施用event关键字修饰的委托(Delegate)类型成员变量,事件处理器(Event
Handler)则是2个函数,A订阅了B的风云,就是说,让B.伊芙nt与A.伊夫ntHandler关联起来。所谓事件激发,正是B.伊芙nt被调用,这时,与其涉及的A.伊夫ntHandler就会被调用。
寄托:是3个得以引用方法的对象,当制造1个委托,也就创办了三个引用方法的指标,进而能够调用这些格局。即委托能够调用它所指的章程。

直白事件模型(CL兰德陆风X8事件模型)

不到家之处:事件的响应者与事件的具备者之间必须建立事件订阅这几个“专线”联系。(必须树立显示的点对点的订阅关系,事件的宿主必须可以一向访问事件的响应者。
会遇见标题:
次第运转期在容器中动态生成1组一样控件,各种控件的同样事件都以用同三个风云处理器来响应。
用户控件的里边事件不可能被外边所订阅。当模块划分不粗大的时候,UI组建的吃万分机会许多,借使想让外层的容器订阅深层控件的某部事件,就需求为每一层组件定义用于揭示内部事件的轩然大波。

直白事件模型(CL途观事件模型)

不完美之处:事件的响应者与事件的具有者之间必须建立事件订阅那一个“专线”联系。(必须树立展现的点对点的订阅关系,事件的宿主必须能够直接待上访问事件的响应者。
会蒙受难点:
次第运转期在容器中动态生成1组同样控件,各样控件的1律事件都以用同2个事变处理器来响应。
用户控件的里边事件不可能被外边所订阅。当模块划分相当的细的时候,UI组建的吃这几个机会多数,假若想让外层的器皿订阅深层控件的某部事件,就需求为每一层组件定义用于暴露内部事件的轩然大波。

路由事件(Routed 伊芙nt)

路由事件的轩然大波具备者和响应者之间未有平素体现的订阅关系。具有者只承担激发事件,响应者则有事件的侦听器(针对某类事件侦听),假如不分包此类事件,则继续传递给上一级,看看有未有其一事件的侦听。
路由事件是静态字段。

路由事件(Routed 伊夫nt)

路由事件的风浪具有者和响应者之间从未直接显示的订阅关系。具有者只负责激发事件,响应者则有事件的侦听器(针对某类事件侦听),假如不带有此类事件,则接二连三传递给上一流,看看有未有那个事件的侦听。
路由事件是静态字段。

wpf内置路由事件

例如:

 <Grid x:Name="grudRoot" Background="Lime" Button.Click="ButtonClick">
    <Button x:Name="Btn" Background="AliceBlue".../>  <!--此处没有bttonclick事件,向上级寻找,找到了就调用-->
    ...
</Grid>
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,意味着此路由事件还未处理完整,事件将基于其模型继续向下拍卖(即进行别的的事件处理方法)

路由事件常用的处理模型

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

动用路由事件响应措施中的e.Handled =
true;意味着此事件已经被拍卖,将不再传递,私下认可e.Handled的值为false,意味着此路由事件还未处理完整,事件将遵照其模型继续向下拍卖(即施行别的的事件处理方法)