WPF中的系统事件一般都是路由事件,陆有事件可以是冒泡也可以是隧道事件,事件在逻辑树中向上或者向下传递。

WPF中许多和用户输入有关的事件一般都是冒泡和隧道事件成对的出现。例如,KeyDown 事件(冒泡)和PreviewKeyDown 事件(隧道)是一对。

当他们成对出现的时候,隧道事件一般会首先被触发,然后是冒泡事件。

例如下图中,Window包含一个StackPanel,StackPanel又再包含了一个StackPanel ,最后的StackPanel中包含一个TextBox。他们都注册了KeyDown 事件(冒泡)和PreviewKeyDown 事件。事件的执行顺序如下:

1. 用户按下键盘,进行输入

2. Window 的PreviewKeyDown事件触发

3. 外部的StackPanelPreviewKeyDown事件触发

4. 底部的StackPanelPreviewKeyDown事件触发

5. TextBox PreviewKeyDown事件触发

6. TextBox KeyDown事件触发

7. 底部的StackPanelKeyDown事件触发

8. 外部的StackPanelKeyDown事件触发

9. Window 的KeyDown事件触发

冒泡和隧道事件成对出现,如果在隧道事件的相应函数中将事件标记为已处理(设置KeyEventArgs.Handled 为 true),那么与之对应的冒泡事件将不会被触发。因为这两个事件公用的是一个KeyEventArgs 实例,所以如果上面的例子中将某个PreviewKeyDown 事件设置为已处理,那么与之对应的KeyDown 事件也会被认为已处理。

原文地址:https://wpf.2000things.com/2012/06/22/586-bubbling-and-tunneling-events-are-typically-paired/

*************************************译者注***************************************

并不是所有的冒泡事件都有对应的隧道事件,它们不一定是一定成对的,比如Button的Click事件。

WPF有三种路由事件方式:冒泡,隧道和直接触发(由事件源直接触发,但不会在可视树中上下传递)。




#586 – 冒泡事件和隧道事件通常是成对出现(Bubbling and Tunneling Events Are Typically Paired)相关推荐

  1. WPF路由事件(冒泡事件和隧道事件)

    隧道事件: 在视觉树 从上往下,从window->实际源头,一般为被点击的控件. 有preview标注的的都是隧道事件 冒泡事件: 在视觉树,丛下往上,点击的控件,一直到最上层(window) ...

  2. WPF中的事件及冒泡事件和隧道事件(预览事件)的区别

    WPF 的采取了路由事件机制,这样事件可以在可视树上层级传递.要知道 XAML 中控件都是由很多其他元素组合而成,比如我们单击了 Button 内部的 TextBlock 元素,Button 依然可以 ...

  3. javascript中的事件冒泡、事件捕获和事件执行顺序

    谈起JavaScript的 事件,事件冒泡.事件捕获.阻止默认事件这三个话题,无论是面试还是在平时的工作中,都很难避免. DOM事件标准定义了两种事件流,这两种事件流有着显著的不同并且可能对你的应用有 ...

  4. JS的事件对象和事件冒泡

    2019独角兽企业重金招聘Python工程师标准>>> 1.事件对象 js的事件对象中保存了当前被触发事件的一些相关的属性信息,如事件源.事件发生时的鼠标位置.事件按键等. 事件对象 ...

  5. js 事件流的事件冒泡和事件捕获与阻止事件传播

    为了方便引入事件流的概念,我们先来说说什么是事件. 事件就是用户或浏览器自身执行的某种动作.换句话说,我们在浏览网页或者 APP 时,通常会在设备上产生很多交互性的操作,例如点击.选择.滚动屏幕.键盘 ...

  6. 事件模型、事件流(冒泡与捕获)、事件代理

    本文原链接:https://www.cnblogs.com/hngdlxy143/p/9068282.html https://www.jb51.net/article/139997.htm 事件模型 ...

  7. JavaScript权威设计--事件冒泡,捕获,事件句柄,事件源,事件对象(简要学习笔记十八)...

    1.事件冒泡与事件捕获 2.事件与事件句柄   3.事件委托:利用事件的冒泡技术.子元素的事件最终会冒泡到父元素直到跟节点.事件监听会分析从子元素冒泡上来的事件. 事件委托的好处:     1.每个函 ...

  8. addeventlistener事件第三个参数_简析JavaScript 事件绑定、事件冒泡、事件捕获和事件执行顺序...

    这篇文章主要介绍了javaScript 事件绑定.事件冒泡.事件捕获和事件执行顺序整理总结的相关资料 (一)事件绑定的几种方式 javascript给DOM绑定事件处理函数总的来说有2种方式:在htm ...

  9. 六十二、Js中的冒泡和捕获点击事件和Vue组件绑定原生事件

    2020/10/18 . 周日.今天又是奋斗的一天. @Author:Runsen @Date:2020/10/18 写在前面:我是「Runsen」,热爱技术.热爱开源.热爱编程.技术是开源的.知识是 ...

最新文章

  1. R语言回归模型构建、回归模型基本假设(正态性、线性、独立性、方差齐性)、回归模型诊断、car包诊断回归模型、特殊观察样本分析、数据变换、模型比较、特征筛选、交叉验证、预测变量相对重要度
  2. Python基础案例(一)
  3. 大数据职业理解_大数据带给我们职业三大根本改变
  4. P5703 【深基2.例5】苹果采购(python3实现)--2022.01.29
  5. UIImage 图片处理:截图,缩放,设定大小,存储
  6. c# mvvm模式获取当前窗口_【自学C#】I 书 12 异常处理
  7. (转)AS3 面相对象 高级话题
  8. Media Queries移动设备样式
  9. 用Gradle 构建你的android程序
  10. php写幻灯片,JavaScript原生代码实现幻灯片
  11. MapGIS10.3Desktop64位学习版带安装教程
  12. mysql 数据库索引命名规范_MYSQL数据库命名及设计规范
  13. 16QAM学习(二)multisim仿真 乘法器的实现,MC1496实现信号乘法混合
  14. 内网创建https网站的SSL证书、代码签名证书
  15. jdk常用的七种性能监控命令行工具
  16. 【win10自定义默认应用】
  17. C++词法记号规则之标识符 关键字 操作符 分隔符 空白符
  18. 在flex 2中直接显示sprit
  19. Xcode 9使用时那些坑
  20. Thinkpad-L14双系统装机

热门文章

  1. 5.19 对学生按姓名进行随机排序 [原创Excel教程]
  2. HDU 5437by cyl优先队列
  3. 树莓派视觉跟踪小车_树莓派智能小车结合摄像头opencv进行物体追踪
  4. 麦肯锡逻辑树——快速分析和解决问题的有效方法
  5. oracle vm 产品介绍,Oracle VM Server for SPARC 产品概述
  6. error: RPC failed; curl 55 OpenSSL SSL_write: SSL_ERROR_ZERO_RETURN, errno 10053
  7. 使用sklearn构建完整的回归项目(一)
  8. 建筑企业资质分立风险
  9. Splunk健康检查orphaned searches
  10. 再见2020,你好2021(2020年度总结)