zoukankan      html  css  js  c++  java
  • 路由事件与传统事件的分析

    1:WinForm

         例如:Button,它的OnClick方法中封装了触发Click事件(或引发Click事件)的语句( 如:if(this.Click!=null) { this.Click.Invoke(s,e);}  // 触发Button的Click事件)   ;   分析微软是这样处理的:在需要的情况下,就调用OnClick方法,从而触发Button的Click事件。

    2:WPF

          例如:Button,它的OnClick方法中封装了触发Button.ClickEvent事件(或引发Button.ClickEvent事件)的语句( 如:RouteEventArgs newEvent = new RouteEventArgs(Button.ClickEvent,this) ; this.RaiseEvent(newEvent);}   // 触发Button.ClickEvent事件)   ;   分析微软是这样处理的:在需要的情况下,就调用OnClick方法,从而触发Button.ClickEvent事件(这是一个路由事件);

         对于CLR事件,它本身属于实例的,例如在窗体布局中放置一个Button按钮(button1),在前台xaml中,Click="button1_Click"  ,  这个xaml代码实际是调用了CLR事件包装器的add{this.AddHandler(ClickEvent,value);  // button1安装Button.ClickEvent事件侦听器}  访问器      ;    若在后台代码实现Button按钮安装Button.ClickEvent事件侦听器,则需要在button1按钮所在的窗体中调用 this.button1.AddHandler(Button.ClickEvent,new RoutedEventHandler(this.button1_Click))  //button1安装Button.ClickEvent事件侦听器  。 所以总结出:在安装Button.ClickEvent事件侦听器这件事上, Button.ClickEvent事件对Button按钮和其它UIElement控件  是   同等对待   的。

    3:那是不是所有的普通事件都需要改为路由事件呢?  答案:不完全正确是的,路由事件 只能 用在UIElement中(因为AddHandler和RemoveHandler方法来自于UIElement),普通类 只能  定义  “普通事件”   。

    4:那是不是所有的普通属性都需要改为依赖属性呢?  答案:不是的, 依赖属性  只能  定义在   Visual及其子类  中(因为依赖属性的宿主必须是DependencyObject —— UIElement:Visual:DependencyObject),普通的数据实体类  只能  定义  “普通属性” 。

  • 相关阅读:
    数据库日志文件很大,如何变小!
    导出到CSV文件乱码的问题
    JQuery 常用方法一览
    马云在阿里巴巴十周年晚会上的激情演讲
    jqueryeasyui(替代 extjs) 介绍
    写一个ajax程序就是如此简单
    ASP.NET 3.5之屠龙刀
    因并发而生,因云计算而热(专家聊天实录)
    专家访谈:为什么我们需要Erlang
    《写给大家看的设计书》封面评选结果揭晓
  • 原文地址:https://www.cnblogs.com/changbaishan/p/4209057.html
Copyright © 2011-2022 走看看