1.什么是路由事件

已下为MSDN中的定义

  功能定义:路由事件是一种可以针对元素树中的多个侦听器(而不是仅针对引发该事件的对象)调用处理程序的事件。

  实现定义:路由事件是一个 CLR 事件,可以由 RoutedEvent 类的实例提供支持并由 Windows Presentation Foundation (WPF) 事件系统来处理。典型的 WPF 应用程序中包含许多元素。 无论这些元素是在代码中创建的还是在 XAML 中声明的,它们构成了一个彼此关联的元素树。

2.冒泡事件和隧道事件

根据事件的定义,事件路由可以按两种方向之一传播,分别为冒泡事件和隧道事件。

  通常在元素树中从源元素向上“冒泡”,直到它到达元素树的根(通常是页面或窗口)。这样您就可以针对源元素的上方层级对象处理事件。例如,可向嵌入的 Grid 元素附加一个 Button.Click 处理程序,而不是直接将其附加到按钮本身。气泡事件有指示其操作的名称(例如,MouseDown)。

   隧道事件采用另一种方式,从根元素开始,向下遍历元素树,直到被处理或到达事件的源元素。这样上游元素就可以在事件到达源元素之前先行截取并进行处理。根据命名惯例,隧道事件通常都以 Preview开头(例如 PreviewMouseDown)。隧道路由事件总在冒泡路由事件之前被触发。

3.WPF事件

  1)生命周期事件:在元素被初始化、加载或卸载时发生这些事件。

    Initialized:某元素被实例化,这时元素已被初始化,但其他元素可能还未初始化。此外尚未应用样式和数据绑定时,属性为true;

    Loaded:整个窗口已经初始化,并应用了样式和数据绑定,该事件发生,这是元素被呈现之前的最后一站。Isloaded属性为true;

    Unloaded:元素被释放时,该事件发生,原因是包含元素的窗口被关闭或元素从窗口中被删除。

  2)鼠标事件:鼠标操作后触发的事件按,如up,down。

  3)键盘事件:键盘动作的结果。

    PreviewKeyDown:隧道,按下一个键时发生;KeyDown:冒泡,按下一个键时发生;

    PreviewTextInput:隧道,当按键完成并且元素正在接收文本输入时发生;TextInput:冒泡;

    PreviewKeyUp:隧道,抬起一个键时发生;

    键盘事件中,一些事件还会挂起另外的一些事件,从而执行更特殊的键盘处理。如TextBox挂起了TextInput事件。

KeyboardDevice属性提供的方法
名称 说明
IsKeyDown() 事件发生通知是否按下该键
IsKeyUp() 事件发生通知是否抬起该键
IsKeyToggled() 事件发生时,检验是否处于打开状态,如Caps Lock
   

  4)手写笔事件:使用手写笔的结果,在平板上用手写笔代替鼠标。

  5)多点触控事件:由一根或多跟手指在触屏设备上操作的结果,仅在win7中支持这些事件。

      以下多点触控摘自MSDN

       

WPF 路由事件总结的更多相关文章

  1. WPF自学入门(三)WPF路由事件之内置路由事件

    有没有想过在.NET中已经有了事件机制,为什么在WPF中不直接使用.NET事件要加入路由事件来取代事件呢?最直观的原因就是典型的WPF应用程序使用很多元素关联和组合起来,是否还记得在WPF自学入门(一 ...

  2. WPF路由事件二:路由事件的三种策略

    一.什么是路由事件 路由事件是一种可以针对元素树中的多个侦听器而不是仅仅针对引发该事件的对象调用处理程序的事件.路由事件是一个CLR事件. 路由事件与一般事件的区别在于:路由事件是一种用于元素树的事件 ...

  3. WPF 路由事件 Event Routing

    原文:WPF 路由事件 Event Routing 1.路由事件介绍 之前介绍了WPF的新的依赖属性系统,本篇将介绍更高级的路由事件,替换了之前的.net普通事件.相比.net的事件,路由事件具有更强 ...

  4. .NET: WPF 路由事件

    (一)使用WPF内置路由事件 xaml: <Window x:Class="WpfApplication1.MainWindow" xmlns="http://sc ...

  5. WPF自学入门(四)WPF路由事件之自定义路由事件

    在上一遍博文中写到了内置路由事件,其实除了内置的路由事件,我们也可以进行自定义路由事件.接下来我们一起来看一下WPF中的自定义路由事件怎么进行创建吧. 创建自定义路由事件分为3个步骤: 1.声明并注册 ...

  6. WPF路由事件三:自定义路由事件

    与依赖项属性类似,WPF也为路由事件提供了WPF事件系统这一组成.为一个类型添加一个路由事件的方式与为类型添加依赖项属性的方法类似,添加一个自定义路由事件的步骤: 一.声明路由事件变量并注册:定义只读 ...

  7. WPF路由事件

    ​    这节讲一下WPF中的路由事件(Routed Event). [什么是事件] 在了解路由事件前,我们应先来了解一下什么是事件(Event). 在Windows系统中,像鼠标单击,双击,移动这样 ...

  8. WPF路由事件学习(一)

    路由事件与一般事件的区别在于:路由事件是一种用于元素树的事件,当路由事件触发后,它可以向上或向下遍历可视树和逻辑树,他用一种简单而持久的方式在每个元素上触发,而不需要任何定制的代码(如果用传统的方式实 ...

  9. WPF 路由事件

    最近想封装一个关于手势的控件,但是由其他的控件覆盖之后发现不能触发,据说是有一些事件在定义的时候就处理过e.Handle了. 定义的时候就处理了,就是为了控件能够正常的工作,别如Button.Mous ...

随机推荐

  1. mac版beyond compare 4 中对比class文件

    http://www.scootersoftware.com/download.php?zz=moreformats 这个网址中没有mac版本的class文件对比的file format.只能自己造了 ...

  2. 编写高质量代码改善C#程序的157个建议[匿名类型、Lambda、延迟求值和主动求值]

    前言 从.NET3.0开始,C#开始一直支持一个新特性:匿名类型.匿名类型由var.赋值运算符和一个非空初始值(或以new开头的初始化项)组成.匿名类型有如下基本特性: 1.既支持简单类型也支持复杂类 ...

  3. SqlDependency数据库同步+signalr 推送消息

    sqlDependency提供了这样一种能力:当被监测的数据库中的数据发生变化时,SqlDependency会自动触发OnChange事件来通知应用程序,从而达到让系统自动更新数据(或缓存)的目的. ...

  4. 每天一个linux命令(45):route命令

    Linux系统的route 命令用于显示和操作IP路由表(show / manipulate the IP routing table).要实现两个不同的子网之间的通信,需 要一台连接两个网络的路由器 ...

  5. ssh开发流程

  6. opencv笔记6:角点检测

    time:2015年10月09日 星期五 23时11分58秒 # opencv笔记6:角点检测 update:从角点检测,学习图像的特征,这是后续图像跟踪.图像匹配的基础. 角点检测是什么鬼?前面一篇 ...

  7. bzoj3555 企鹅QQ

    3555: [Ctsc2014]企鹅QQ Time Limit: 20 Sec  Memory Limit: 256 MBSubmit: 1640  Solved: 613 Description P ...

  8. java中获取本地文件的编码

    import java.util.*; public class ScannerDemo { public static void main(String[] args) { System.out.p ...

  9. Linux—fork函数学习笔记

    fork()函数 在赋值语句pid = fork();之前,只有一个进程在执行这段代码,但在这条语句之后,就变成两个进程在执行了,这两个进程的代码部分完全相同.> 两个进程中,原先就存在的那个被 ...

  10. linux下IPTABLES配置详解(转)

    如果你的IPTABLES基础知识还不了解,建议先去看看.开始配置我们来配置一个filter表的防火墙.(1)查看本机关于IPTABLES的设置情况[ ~]# iptables -L -nChain I ...