WPF路由事件学习(一)】的更多相关文章

路由事件与一般事件的区别在于:路由事件是一种用于元素树的事件,当路由事件触发后,它可以向上或向下遍历可视树和逻辑树,他用一种简单而持久的方式在每个元素上触发,而不需要任何定制的代码(如果用传统的方式实现一个操作,执行过个事件的调用则需要执行代码将事件串连起来方可) 路由事件的路由策略: 所谓的路由策略就是指:路由事件实现遍历元素的方式,总共有三种: Bubbling(冒泡) Tunneling(管道传递) Direct(直接) 一.冒泡: 例: <Window x:Class="Wpfce…
有没有想过在.NET中已经有了事件机制,为什么在WPF中不直接使用.NET事件要加入路由事件来取代事件呢?最直观的原因就是典型的WPF应用程序使用很多元素关联和组合起来,是否还记得在WPF自学入门(一)XAM基本知识中提到过两棵树,逻辑树LogicalTree 和可视化树 VisualTree,那么它们分别是什么? 举个例子: 上面的代码就是逻辑树LogicalTree,一个Grid里面镶嵌了其他控件或布局组件,相当于一棵树中的叶子.而可视化树VisualTree是什么?它就是一个树中的树叶里面…
一.什么是路由事件 路由事件是一种可以针对元素树中的多个侦听器而不是仅仅针对引发该事件的对象调用处理程序的事件.路由事件是一个CLR事件. 路由事件与一般事件的区别在于:路由事件是一种用于元素树的事件,当路由事件触发后,它可以向上或向下遍历可视树和逻辑树,他用一种简单而持久的方式在每个元素上触发,而不需要任何定制的代码(如果用传统的方式实现一个操作,执行整个事件的调用则需要执行代码将事件串联起来). 路由事件的路由策略: 所谓的路由策略就是指:路由事件实现遍历元素的方式. 路由事件一般使用以下三…
原文:WPF 路由事件 Event Routing 1.路由事件介绍 之前介绍了WPF的新的依赖属性系统,本篇将介绍更高级的路由事件,替换了之前的.net普通事件.相比.net的事件,路由事件具有更强的传播能力,支持向上冒泡和向下隧道传播.路由事件允许源自某个元素的事件由另一个元素引发. 2.路由事件定义 WPF事件模型和WPF属性模型非常类似.都是只读的静态字段. [DefaultEvent("Click")] [Localizability(LocalizationCategory…
​    这节讲一下WPF中的路由事件(Routed Event). [什么是事件] 在了解路由事件前,我们应先来了解一下什么是事件(Event). 在Windows系统中,像鼠标单击,双击,移动这样的,都是在触发着一个个事件,事件代表着用户在Windows上的一个动作,相当于用户给系统交代了一个任务让它去执行.本质上事件就是条信息数据,这条数据有对事件的描述,以及携带着事件的参数,这些参数可以看做是事件的"Metadata",比如你点击鼠标左键,会触发MouseLeftDown和Mo…
1.什么是路由事件 已下为MSDN中的定义 功能定义:路由事件是一种可以针对元素树中的多个侦听器(而不是仅针对引发该事件的对象)调用处理程序的事件. 实现定义:路由事件是一个 CLR 事件,可以由 RoutedEvent 类的实例提供支持并由 Windows Presentation Foundation (WPF) 事件系统来处理.典型的 WPF 应用程序中包含许多元素. 无论这些元素是在代码中创建的还是在 XAML 中声明的,它们构成了一个彼此关联的元素树. 2.冒泡事件和隧道事件 根据事件…
(一)使用WPF内置路由事件 xaml: <Window x:Class="WpfApplication1.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="clr-namespace:Wpf…
在上一遍博文中写到了内置路由事件,其实除了内置的路由事件,我们也可以进行自定义路由事件.接下来我们一起来看一下WPF中的自定义路由事件怎么进行创建吧. 创建自定义路由事件分为3个步骤: 1.声明并注册路由事件. 2.利用CLR事件包装路由事件(封装路由事件). 3.创建可以激发路由事件的方法. 现在我们一起创建一个能够报告当前时间和当前位置信息的路由事件,一起去控件里面游览一番.现在开始创建自定义路由事件  一.声明自定义路由事件 创建继承RoutedEventArgs类的派生类ReportCu…
与依赖项属性类似,WPF也为路由事件提供了WPF事件系统这一组成.为一个类型添加一个路由事件的方式与为类型添加依赖项属性的方法类似,添加一个自定义路由事件的步骤: 一.声明路由事件变量并注册:定义只读的静态变量字段RouteEvent类来声明一个变量,然后使用EventManager的RegisterRoutedEvent()方法向事件系统注册路由事件,该方法的签名如下: public static RoutedEvent RegisterRoutedEvent(string name, Rou…
最近想封装一个关于手势的控件,但是由其他的控件覆盖之后发现不能触发,据说是有一些事件在定义的时候就处理过e.Handle了. 定义的时候就处理了,就是为了控件能够正常的工作,别如Button.MouseDown什么的. 当你写Click事件的时候是能够触发的,但是Button.MouseDown是不会触发的,估计是封装Click事件的时候就e.Handle处理了. 使用Preview事件,即Touch系列的事件都换成PreviewTouch事件.(这里如果Preview被处理了呢?不过写的是父控…