学习WPF——了解路由事件
入门
我们先来看一个例子
前台代码:
|
后台代码:
|
点击按钮的运行效果 第一个弹出窗口 |
第二个弹出窗口:
|
第三个弹出窗口:
|
说明
当点击按钮之后,先触发按钮的click事件,再上查找,发现stackpanel也注册了该事件,那么接着触发StackPanel的Button.Click事件,依次再触发Grid的Button.Click事件,这就是最基本的事件路由,事件路由的策略是右内向外的
|
如果不希望在XAML中注册路由事件,那么也可以通过编码的方式注册路由事件如下所示
|
如果想终止事件的向上传递,可以使用这种办法
|
上面的例子是一个冒泡路由事件,是由内向外传递的事件
WPF中还有一种事件是隧道路由事件,是由外向内传递的事件
|
路由事件解析
在上面的例子中我们看到了Button类的路由事件Click
下面我们来剖析源码,看看Button是如何注册这个路由事件的
要使用路由事件,必须先定义路由事件
首先在Button类的基类ButtonBase中发现了路由事件的定义ClickEvent
代码中使用EventManager.RegisterRoutedEvent注册了路由事件
这个方法包含事件的名称、路由类型等内容
|
定义了ClickEvent事件之后还需要对事件进行封装 这里使用到了.Net的事件封装器, AddHandler和RemoveHandler用于添加和删除已注册的调用程序 |
|
修改记录
2015-1-5:完成一部分内容
2015-1-14:完成全部内容
参考资料
《Pro WPF 4.5 in C# 4th Edition》
分类:
Silverlight/WPF
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
2009-01-14 三:理解Page类的运行机制(例:在render方法中生成静态文件)