路由事件与传统事件的分析
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),普通的数据实体类 只能 定义 “普通属性” 。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器