注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

分享,态度 ·~~

—— 十年太长,五年;如果可以回到五年前,你最想对那时候的自己说什么?

 
 
 

日志

 
 

Element树与事件Routing  

2010-05-14 09:52:27|  分类: DotNet |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
写在前面:wpf中事件的发送者或所有者是很奇怪的,除了使用sender传入,还有Source和OriginalSource,这三个对象都是指代发送者或相关所有者的。而如果一个element树中,多个控件都注册了相同的事件如MouseDown和PreviewMouseDown,那么,这两个事件还会根据发送者sender在element树的层次而设置优先级的。

element树
在一个window下面,有如下的element层次关系,即element树。
Window
            Grid
Button   TextBlock   ScrollViewer
TextBlock                StackPanel
                                TextBlock

为Window,Grid,Button,TextBlock的实例增加MouseDown,MouseUp,PreviewMouseUp,PreviewMouseDown事件,当点击Button中的非TextBlock部分时,捕捉所有的事件与事件发送者/所有者。得到下面的图表。
效果图
 Element树与事件Routing - 乂乂 - 一个人,一支烟  ·~~
由element树,知道,TextBlock在Button的Content中,因为没有点击到TextBlock的区域,所以sender,Source,OriginalSource都不出现TextBlock。而点击当然有MouseDown和MouseUp的事件。所以出现两组不同类型的事件。

PreviewMouseDown和PreviewMouseUp都会比没有Preview的事件先出现,在event routing中,PreviewMouseDown事件是“下沉事件”,是根据element树的根往下开始,并且会不断的发展直到鼠标点击到的当前的element,这个过程叫“向下挖掘”。而MouseDown事件与PreviewMouseDown当好相反,它是一个“上升事件”,它按照element树,从鼠标当前点击的element一直上升到根element。
而对于Source对象的实例,好像是比较的明确,也就是当前的控件。而OriginalSource大部分时候是与Source一样的,不过,上面就是不一样。ButtonChrome是继承自Decorator的,且属于Window.Themes,按钮使用ButtonChrome来绘制表面。

Wpf的Event Routing有很多的特点。需要大家来发现。


【from 小作坊网ChakMan http://www.myfirm.cn/20085/20080520080820496.html
  评论这张
 
阅读(613)| 评论(1)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017