阅读本文前,请先了解 冒泡路由事件:http://www.cnblogs.com/andrew-blog/p/WPF_BubbledEvent.html

隧道路由事件的工作方式和冒泡路由事件相同,但方向相反。例如,如果 MouseUp 事件是一个隧道路由事件(实际上不是),在特殊的标签示例中单击图形将导致MouseUp 事件首先在窗口中引发、然后是在Grid 控件、接下来在 StackPanel 控件中引发,以此类推,直到到达实际源头,既标签中的图像为止。

很容易识别隧道路由事件,因为它们都以单词 Preview 开头。而且,WPF 通常成对地定义冒泡路由事件和隧道路由事件。这意味着如果发现一个冒泡的 MouseUp 事件,就还可以找到一个 PreviewMouseUp 事件。隧道路由事件总是在冒泡路由事件之前被触发的!

更有趣的是,如果将隧道路由事件标记为已处理过,那么冒泡路由事件就不会发生。这是因为两个事件共享同一个 RoutedEventArgs 类的实例。所以在操作的时候 一定要谨慎。

识别路由事件的策略:

显然,不同的事件路由策略会影响事件使用方式。但是如果确定特定的事件正在使用的路由类型呢?

隧道路由事件非常简单。根据 .NET 约定,隧道路由事件总是以单词 Preview 开头(如 PreviewKeyDown ),但是,没有类似的机制从直接路由事件中区分出冒泡路由事件。对于使用 WPF 的开发人员,最简单的方法是在 Visual Studio 的帮助文档中查找事件。将会看到路由事件的信息,这些信息指明了定义事件的静态字段、路由类型以及事件的签名等。

可以通过分析事件的静态字段以及编程方式得到的信息。例如,ButtonBase.ClickEvent.RoutingStrategy 属性提供了一个指示 Click 事件所使用的路由类型的枚举值。

参考:http://www.wxzzz.com/?id=130

WPF 隧道路由事件的更多相关文章

  1. 学习WPF——了解路由事件

    入门 我们先来看一个例子 前台代码: 后台代码: 点击按钮的运行效果第一个弹出窗口 第二个弹出窗口: 第三个弹出窗口: 说明 当点击按钮之后,先触发按钮的click事件,再上查找,发现stackpan ...

  2. 迟到的 WPF 学习 —— 路由事件

    1. 理解路由事件:WPF 通过事件路由(event routing)概念增强了传统的事件执行的能力和范围,允许源自某个元素的事件由另一个元素引发,例如,事件路由允许工具栏上的一个按钮点击的事件在被代 ...

  3. WPF - 善用路由事件

    原文:WPF - 善用路由事件 在原来的公司中,编写自定义控件是常常遇到的任务.但这些控件常常拥有一个不怎么好的特点:无论是内部还是外部都没有使用路由事件.那我们应该怎样宰自定义控件开发中使用路由事件 ...

  4. WPF的路由事件、冒泡事件、隧道事件(预览事件)

    本文摘要: 1:什么是路由事件: 2:中断事件路由: 3:自定义路由事件: 4:为什么需要自定义路由事件: 5:什么是冒泡事件和预览事件(隧道事件): 1:什么是路由事件 WPF中的事件为路由事件,所 ...

  5. 【WPF】路由事件

    总结WPF中的路由事件,我将学到的内容分为四部分来逐渐掌握 第一部分:wpf中内置的路由事件 以Button的Click事件来说明内置路由事件的使用 XAML代码: <Window x:Clas ...

  6. WPF中路由事件的传播

    路由事件(RoutedEvent)是WPF中新增的事件,使用起来与传统的事件差别不大, 但传播方式是完全不同的. 路由事件的传播方式 通过RoutingStrategy来定义传播的方式 public ...

  7. 细说WPF自定义路由事件

    WPF中的路由事件 as U know,和以前Windows消息事件区别不再多讲,这篇博文中,将首先回顾下WPF内置的路由事件的用法,然后在此基础上自定义一个路由事件. 1.WPF内置路由事件   W ...

  8. WPF 之路由事件和附加事件(六)

    一.消息驱动与直接事件模型 ​ 事件的前身是消息(Message).Windows 是消息驱动的系统,运行其上的程序也遵循这个原则.消息的本质就是一条数据,这条消息里面包含着消息的类别,必要的时候还记 ...

  9. WPF:自定义路由事件的实现

    路由事件通过EventManager,RegisterRoutedEvent方法注册,通过AddHandler和RemoveHandler来关联和解除关联的事件处理函数:通过RaiseEvent方法来 ...

随机推荐

  1. Linux系统扩容根目录磁盘空间

    作者:非法小恋 一.使用背景 Linux根目录磁盘空间不够用了,当修改了虚拟机模版增加磁盘大小或者插入了一块新硬盘,但是发现系统里的大小还是没改变. 产生的原因是没有给磁盘格式化,没有增加分区. 二. ...

  2. Android设计模式系列(1)--SDK源码之组合模式

    Android中对组合模式的应用,可谓是泛滥成粥,随处可见,那就是View和ViewGroup类的使用.在android UI设计,几乎所有的widget和布局类都依靠这两个类.组合模式,Compos ...

  3. Linux-软件包管理-RPM安装位置\源码包安装位置

    rpm -ql httpd 查看apache包中文件的安装位置 find /etc -name httpd 查找apache程序的启动执行httpd所在位置 cd /etc/rc.d/init.d 切 ...

  4. Linux命令-网络命令:write

    write只能给登录用户发送消息,所以先登录两个用户root和wangyunpeng root登录: wangyunpeng登录: who 查看登录用户 root发送信息给wangyunpeng: w ...

  5. 转 Android Activity之间动画完整版详解

    标签:Android Activity动画详解 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://mzh3344258.blog.5 ...

  6. spi flash偶尔出现写入错误的情况

    spi flash W25Q128会偶尔出现写入错误的情况,会发现读出的值和写入的值不一致,需加入2次读出比较判断. W25QXX_Read(&temp_date_count,0x000000 ...

  7. AutoFac文档4(转载)

    目录 开始 Registering components 控制范围和生命周期 用模块结构化Autofac xml配置 与.net集成 深入理解Autofac 指导 关于 词汇表 自动装配 从容器中可用 ...

  8. 【iOS开发之Objective-C】书签管理器项目

    1.项目 新建一个书签管理器的项目,能够存储书签的网址.中文名.星级.訪问量和权限信息.具有增.删.改.查和排序的功能. 2.找对象,抽象类 书签管理器,书签管理器.书签管理器--  多读几次书是不是 ...

  9. ubuntu下将CapsLock改为Ctrl键

    需求:Ubuntu下用Vim时,ESC因为在左上角,还算是好按,但是Ctrl就太坑了,在左右两个下角,实在是太不方便了. 经过分析决定将:CapsLock键改为Ctrl,但仍然保留下面的原Ctrl键( ...

  10. Atitit. 有限状态机 fsm 状态模式

    Atitit. 有限状态机 fsm 状态模式 1. 有限状态机 1 2. "状态表"和"状态轮换表" 1 3. 有限状态机概念(状态(State)事件(Even ...