转自http://www.cnblogs.com/helloj2ee/archive/2010/09/30/1839660.html
我看过此博主的多篇文章和著作,这篇文章有助于理解WPF的路由事件,我看的是PDF版,特此贴出来以飨读者。
正如WPF在简单的.NET属性概念上添加了许多基础的东西一样,它也为.NET事件添加了许多基础的东西。路由事件是专门设计用于在元素树中使用的事件。当路由事件触发后,它可以向上或向下遍历可视树和逻辑树,用一种简单而且持久的方式在每个元素上触发,而不需要使用任何定制代码。
事件路由让许多应用程序不去留意可视树的细节(对于样式重置来说这是很不错的),并且对于成功的WPF元素创作至关重要。例如,Button有一个Click事件,这是基于底层的MouseLeftButtonDown事件或者KeyDown事件实现的。当用户的鼠标指针位于标准按钮之上,且按下鼠标左键的时候,它们实际上是与ButtonChrome或者TextBlock可视子元素在交互。由于事件遍历了可视树,所以Button元素最终会发现这个事件,并处理该事件。类似地,对于VCR样式的Stop(停止)按钮来说,一个用户可能在Rectangle逻辑子元素上直接按下鼠标左键。由于事件遍历了逻辑树,Button元素还是会发现这个事件,并处理该事件。(如果你真的希望能够区分这个事件是Rectangle上的还是凸出的Button上的,也可以自己去区分代码。)