当前位置:首页 > 科技  > 软件

WPF的事件路由系统传播机制(隧道传播、直接传播和冒泡传播)

来源: 责编: 时间:2024-04-03 09:09:38 292观看
导读WPF的事件路由系统包括三种类型的事件传播机制:隧道传播、直接传播和冒泡传播。每种传播机制都有不同的传播路径和使用场景。1. 隧道传播(Tunneling)隧道传播是事件从根元素向下传递的机制。事件会依次经过可视化树中的

lMp28资讯网——每日最新资讯28at.com

WPF的事件路由系统包括三种类型的事件传播机制:隧道传播、直接传播和冒泡传播。每种传播机制都有不同的传播路径和使用场景。lMp28资讯网——每日最新资讯28at.com

1. 隧道传播(Tunneling)

隧道传播是事件从根元素向下传递的机制。事件会依次经过可视化树中的每个元素,直到达到事件的原始源。在隧道传播中,事件处理程序会首先被调用,然后再向下传递。lMp28资讯网——每日最新资讯28at.com

示例代码:lMp28资讯网——每日最新资讯28at.com

<Grid PreviewMouseDown="Grid_PreviewMouseDown">    <Button PreviewMouseDown="Button_PreviewMouseDown" /></Grid>
private void Grid_PreviewMouseDown(object sender, MouseButtonEventArgs e){    Console.WriteLine("Grid PreviewMouseDown");    e.Handled = true; // 停止事件传播}private void Button_PreviewMouseDown(object sender, MouseButtonEventArgs e){    Console.WriteLine("Button PreviewMouseDown");}

使用场景:lMp28资讯网——每日最新资讯28at.com

  • 可以在父级元素上捕获事件并进行处理,然后决定是否继续传播给子级元素。
  • 可以在事件的早期阶段对事件进行拦截或干预。
  • 可以在父级元素上实现一些全局的事件处理逻辑。

2. 直接传播(Direct)

直接传播是事件沿着可视化树的路径上的每个元素进行传播的机制。它对事件的处理顺序没有要求,只是按照元素在视觉树中的顺序触发。lMp28资讯网——每日最新资讯28at.com

示例代码:lMp28资讯网——每日最新资讯28at.com

<Grid PreviewMouseDown="Grid_PreviewMouseDown">    <Button PreviewMouseDown="Button_PreviewMouseDown" /></Grid>
private void Grid_PreviewMouseDown(object sender, MouseButtonEventArgs e){    Console.WriteLine("Grid PreviewMouseDown");}private void Button_PreviewMouseDown(object sender, MouseButtonEventArgs e){    Console.WriteLine("Button PreviewMouseDown");}

使用场景:lMp28资讯网——每日最新资讯28at.com

  • 可以在父级元素和子级元素上都处理事件,并且不影响传播的顺序。
  • 可以在不同元素上进行不同的事件处理逻辑。

3. 冒泡传播(Bubbling)

冒泡传播是事件从事件源开始向上传递的机制,沿着可视化树向上冒泡直到达到根元素。在冒泡传播中,事件处理程序会首先被子级元素调用,然后再依次向上传递。lMp28资讯网——每日最新资讯28at.com

示例代码:lMp28资讯网——每日最新资讯28at.com

<Grid MouseDown="Grid_MouseDown">    <Button MouseDown="Button_MouseDown" /></Grid>
private void Grid_MouseDown(object sender, MouseButtonEventArgs e){    Console.WriteLine("Grid MouseDown");}private void Button_MouseDown(object sender, MouseButtonEventArgs e){    Console.WriteLine("Button MouseDown");    e.Handled = true; // 停止事件传播}

使用场景:lMp28资讯网——每日最新资讯28at.com

  • 可以在父级元素上捕获子级元素的事件并进行处理。
  • 可以在父级元素上实现一些全局的事件处理逻辑。

鼠标单击事件序列说明:

  • PreviewMouseLeftButtonDown for Window (Tunnel):窗口接收到鼠标左键按下的预览事件。
  • PreviewMouseDown for Window (Tunnel):窗口接收到鼠标按下的预览事件。
  • PreviewMouseLeftButtonDown for StackPanel (Tunnel):StackPanel(堆栈面板)接收到鼠标左键按下的预览事件。
  • PreviewMouseDown for StackPanel (Tunnel):StackPanel接收到鼠标按下的预览事件。
  • PreviewMouseLeftButtonDown for Label (Tunnel):Label(标签)接收到鼠标左键按下的预览事件。
  • PreviewMouseDown for Label (Tunnel):Label接收到鼠标按下的预览事件。
  • MouseLeftButtonDown for Label (Bubble):Label接收到鼠标左键按下的冒泡事件。
  • MouseDown for Label (Bubble):Label接收到鼠标按下的冒泡事件。
  • MouseLeftButtonDown for StackPanel (Bubble):StackPanel接收到鼠标左键按下的冒泡事件。
  • MouseDown for StackPanel (Bubble):StackPanel接收到鼠标按下的冒泡事件。
  • MouseLeftButtonDown for Window (Bubble):窗口接收到鼠标左键按下的冒泡事件。
  • MouseDown for Window (Bubble):窗口接收到鼠标按下的冒泡事件。
  • PreviewMouseLeftButtonUp for Window (Tunnel):窗口接收到鼠标左键释放的预览事件。
  • PreviewMouseUp for Window (Tunnel):窗口接收到鼠标释放的预览事件。
  • PreviewMouseLeftButtonUp for StackPanel (Tunnel):StackPanel接收到鼠标左键释放的预览事件。
  • PreviewMouseUp for StackPanel (Tunnel):StackPanel接收到鼠标释放的预览事件。
  • PreviewMouseLeftButtonUp for Label (Tunnel):Label接收到鼠标左键释放的预览事件。
  • PreviewMouseUp for Label (Tunnel):Label接收到鼠标释放的预览事件。
  • MouseLeftButtonUp for Label (Bubble):Label接收到鼠标左键释放的冒泡事件。
  • MouseUp for Label (Bubble):Label接收到鼠标释放的冒泡事件。
  • MouseLeftButtonUp for StackPanel (Bubble):StackPanel接收到鼠标左键释放的冒泡事件。
  • MouseUp for StackPanel (Bubble):StackPanel接收到鼠标释放的冒泡事件。
  • MouseLeftButtonUp for Window (Bubble):窗口接收到鼠标左键释放的冒泡事件。
  • MouseUp for Window (Bubble):窗口接收到鼠标释放的冒泡事件。

通过这个事件序列,可以看到鼠标单击事件从窗口顶层元素开始,在隧道传播阶段(Tunnel)逐级向下,然后在直接传播阶段(Direct)从最深的子元素开始逐级向上,最后在冒泡传播阶段(Bubble)再次逐级向上传播。这个事件序列反映了鼠标单击事件的路由过程。lMp28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-81058-0.htmlWPF的事件路由系统传播机制(隧道传播、直接传播和冒泡传播)

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: React 19 要来了!究竟带来了哪些实用的特性呢?

下一篇: Python Flask应用程序如何组织和管理多个服务模块

标签:
  • 热门焦点
  • 影音体验是真的强 简单聊聊iQOO Pad

    大公司的好处就是产品线丰富,非常细分化的东西也能给你做出来,例如早先我们看到了新的vivo Pad2,之后我们又在iQOO Neo8 Pro的发布会上看到了iQOO的首款平板产品iQOO Pad。虽
  • 掘力计划第 20 期:Flutter 混合开发的混乱之治

    在掘力计划系列活动第20场,《Flutter 开发实战详解》作者,掘金优秀作者,Github GSY 系列目负责人恋猫的小郭分享了Flutter 混合开发的混乱之治。Flutter 基于自研的 Skia 引擎
  • SpringBoot中使用Cache提升接口性能详解

    环境:springboot2.3.12.RELEASE + JSR107 + Ehcache + JPASpring 框架从 3.1 开始,对 Spring 应用程序提供了透明式添加缓存的支持。和事务支持一样,抽象缓存允许一致地使用各
  • 一年经验在二线城市面试后端的经验分享

    忠告这篇文章只适合2年内工作经验、甚至没有工作经验的朋友阅读。如果你是2年以上工作经验,请果断划走,对你没啥帮助~主人公这篇文章内容来自 「升职加薪」星球星友 的投稿,坐
  • 得物效率前端微应用推进过程与思考

    一、背景效率工程随着业务的发展,组织规模的扩大,越来越多的企业开始意识到协作效率对于企业团队的重要性,甚至是决定其在某个行业竞争中突围的关键,是企业长久生存的根本。得物
  • 只需五步,使用start.spring.io快速入门Spring编程

    步骤1打开https://start.spring.io/,按照屏幕截图中的内容创建项目,添加 Spring Web 依赖项,并单击“生成”按钮下载 .zip 文件,为下一步做准备。请在进入步骤2之前进行解压。图
  • 2023年,我眼中的字节跳动

    此时此刻(2023年7月),字节跳动从未上市,也从未公布过任何官方的上市计划;但是这并不妨碍它成为中国最受关注的互联网公司之一。从2016-17年的抖音强势崛起,到2018年的&ldquo;头腾
  • 东方甄选单飞:有些鸟注定是关不住的

    作者:彭宽鸿来源:华尔街科技眼&zwj;&zwj;&zwj;&zwj;&zwj;&zwj;&zwj;&zwj;&zwj;&zwj;东方甄选创始人俞敏洪带队的&ldquo;7天甘肃行&rdquo;直播活动已在近日顺利收官。成立后一
  • 荣耀Magic4 至臻版 首创智慧隐私通话 强劲影音系统

    2022年第一季度临近尾声,在该季度内,许多品牌陆续发布自己的最新产品,让大家从全新的角度来了解当今的手机技术。手机是电子设备中,更新迭代十分迅速的一款产品,基
Top