Silverlight中的路由事件与事件冒泡机制详解
1. 路由事件概述
在开发中,事件是对象(如Silverlight元素)发出的消息,用于在重要事情发生时通知代码。WPF引入了事件路由的新概念,增强了.NET事件模型。事件路由允许事件在一个元素中发起,却由另一个元素引发。例如,在一个形状上的点击事件可以上升到该形状的容器,再到包含该容器的页面,最后由代码处理。
Silverlight借鉴了WPF的部分路由事件模型,但形式上大大简化。WPF支持多种类型的路由事件,而Silverlight仅支持一种:冒泡事件。冒泡事件会从嵌套较深的元素沿着包含层次结构向上传播到其容器。并且,Silverlight的事件冒泡仅与少数键盘和鼠标输入事件(如MouseMove和KeyDown)相关,且仅由少数低级元素支持。Silverlight的高级控件事件(如Click)不使用事件冒泡,自定义控件的事件也无法使用事件路由。
2. 核心元素事件
Silverlight元素的基本事件集继承自两个核心类:UIElement和FrameworkElement。所有Silverlight元素都派生自这两个元素。
2.1 UIElement类事件
UIElement类定义了处理用户输入的最重要事件,也是唯一使用事件冒泡的事件。以下是UIElement类的事件列表:
| 事件 | 是否冒泡 | 描述 |
| ---- | ---- | ---- |
| KeyDown | 是 | 按下键时发生 |
| KeyUp | 是 | 释放键时发生 |
| TextInput | 是 | 元素接收到字符时发