路由事件的小结

针对:<!--<Button x:Name="button1" Width="80" Height="80"    Button.Click="Button_Click"     Click="Button_Click"/>-->

小结1:

<!--Button.Click="Button_Click"是安装方式,当前控件安装了Button.Click事件侦听器,当该事件被激发时,会调用Button.Click事件的处理方法Button_Click-->

小结2:

(A):  xaml的<Grid x:Name="grid_1" Button.Click="Button_Click_1"/>  《===》 等价于   后台的 grid_1.AddHandler(Button.ClickEvent, new RoutedEventHandler(Button_Click_1)); //这种是“安装”方式(是路由事件的安装),推荐”经常“使用,这种方式可以给任何UIElement安装路由事件侦听器,甚至可以给宿主元素自己安装。说明:路由事件的安装只有(A)中这两种方法;而(B)中的两种方法属于CLR事件的注册(与直接事件的注册完全相同)。

(B)  xaml的<Button  x:Name="button1"  Click="Button_Click"/>  《====》 等价于   后台的 button1.Click += Button_Click

提示:在(B)中,这两种方法,实际上,在后台代码中调用的都是 CLR事件包装器的add访问器,如下所示:

public event RoutedEventHandler Click
    {
        add{this.AddHandler(ClickEvent,value);}//封装了安装方式,相当于button1安装Button.Click路由事件,这与其他元素安装Button.Click路由事件没有区别        
        remove{.....}
    }

//这种是“注册”方式(是CLR事件的注册,而非路由事件的安装),属于.net的老方法,它虽然内部封装了”安装方式“ ,但只能给宿主自己安装(这恰恰是相对于安装方式的缺点),比较陈旧(非WPF标准),建议”少用“。

时间: 2024-11-07 08:46:56

路由事件的小结的相关文章

WPF自定义路由事件(二)

WPF中的路由事件 as U know,和以前Windows消息事件区别不再多讲,这篇博文中,将首先回顾下WPF内置的路由事件的用法,然后在此基础上自定义一个路由事件. 1.WPF内置路由事件 WPF中的大多数事件都是路由事件,WPF有3中路由策略: 具体不多讲,单需要注意的是WPF路由事件是沿着VIsualTree传递的.VisualTree与LogicalTree的区别在于:LogicalTree的叶子节点是构成用户界面的控件(xaml紧密相关),而VisualTree要连控件中的细微结构也

WPF 添加自定义路由事件

给button  Btn添加自定义的路由事件Backdoor; Btn.AddHandler(Button.MouseUpEvent, new RoutedEventHandler(Backdoor), true); 版权声明:本文为博主原创文章,未经博主允许不得转载.

WPF自定义路由事件

一 概要 本文通过实例演示WPF自定义路由事件的使用,进而探讨了路由事件与普通的CLR事件的区别(注:"普通的CLR事件"这个说法可能不太专业,但是,我暂时也找不到什么更好的称呼,就这么着吧,呵呵.)(扩展阅读:例说.NET事件的使用). 二 实例演示与说明 1 新建DetailReportEventArgs类,该类派生自RoutedEventArgs类,RoutedEventArgs类包含与路由事件相关的状态信息和事件数据.DetailReportEventArgs类中定义了属性Ev

WPF路由事件二:路由事件的三种策略

一.什么是路由事件 路由事件是一种可以针对元素树中的多个侦听器而不是仅仅针对引发该事件的对象调用处理程序的事件.路由事件是一个CLR事件. 路由事件与一般事件的区别在于:路由事件是一种用于元素树的事件,当路由事件触发后,它可以向上或向下遍历可视树和逻辑树,他用一种简单而持久的方式在每个元素上触发,而不需要任何定制的代码(如果用传统的方式实现一个操作,执行整个事件的调用则需要执行代码将事件串联起来). 路由事件的路由策略: 所谓的路由策略就是指:路由事件实现遍历元素的方式. 路由事件一般使用以下三

ionic 监听路由事件 验证登录

.run(['$rootScope', '$location' , '$state', '$http','$ionicPopup', function($rootScope, $location, $state,$http,$ionicPopup){ var loginname=['tab.member','loan','repayment','iftab.exe']; $http.jsonp(apiurl+"/home/appapi/isLogin?callback=JSON_CALLBACK

路由事件与附加事件区别

路由事件: 引发事件和处理CLR事件(注册和解除),都是由宿主自身处理的(this.RaiseEvent   this.AddHandler    this.RemoveHandler):宿主包含3个部分:声明并注册路由事件(XXXEvent).定义CLR事件包装器(XXX{add,remove}).封装包含引发路由事件代码的方法(OnFunction) 附加事件: 引发事件   和  处理CLR包装(注册和解除),都是由“目标元素”(即要安装该附加事件的那个元素)处理的(e.RaiseEven

WPF中的Visual Tree和Logical Tree与路由事件

1.Visual Tree和Logical TreeLogical Tree:逻辑树,WPF中用户界面有一个对象树构建而成,这棵树叫做逻辑树,元素的声明分层结构形成了所谓的逻辑树!!Visual Tree:可视树(也叫视觉树),可视树是对逻辑树的扩展,可视树将逻辑树的节点打散,分放到核心棵树组件中,它表述了一些详细的可视化实现,而不是把每个元素当做一个”黑盒“.我们以一个简单的程序来观察下逻辑树与可视树: <Window x:Class="WpfApplication28.MainWind

迟到的 WPF 学习 —— 路由事件

1. 理解路由事件:WPF 通过事件路由(event routing)概念增强了传统的事件执行的能力和范围,允许源自某个元素的事件由另一个元素引发,例如,事件路由允许工具栏上的一个按钮点击的事件在被代码处理之前上传到工具栏,再由工具栏上传到所属窗体 2. 定义.注册和包装路由事件:和依赖性属性类似,它由只读的静态字段表示,在一个静态构造函数中注册,并通过一个标准的 .Net 事件定义进行包装.如 Button 的 Click 事件,该事件继承自抽象的 ButtonBase 基类 public a

android Touch事件传递小结

这次还是先贴上测试代码吧.. 主布局文件是个三层结构,最外层和中间层都是LinearLayout的子类,里层是个TextView: <com.example.touchevent.OutterLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/o