如何:处理路由事件
更新:2007 年 11 月
本示例演示冒泡事件的工作方式,以及如何编写可处理路由事件数据的处理程序。
示例
Windows Presentation Foundation (WPF) 中的元素以元素树结构形式排列。父元素可以参与处理最初由元素树中的子元素引发的事件,这是由于存在事件路由。
路由事件通常遵循以下两个路由策略之一:冒泡和隧道。下面的示例将重点放在冒泡事件上,并且使用 ButtonBase.Click 事件来演示路由的工作方式。
下面的示例使用 XAML 属性语法向公用的父元素(在本示例中为 StackPanel)附加事件处理程序。本示例使用属性语法向 StackPanel 父元素附加事件处理程序,而不是为每个 Button 子元素都附加一个事件处理程序。这个事件处理模式演示了如何使用事件路由技术来减少需要附加处理程序的元素数量。每个 Button 的所有冒泡事件都通过父元素进行路由。
请注意,在父 StackPanel 元素上,指定为属性的 Click 事件名称可通过命名 Button 类来进行部分限定。Button 类是一个 ButtonBase 派生类,它在其成员列表中有一个 Click 事件。如果要处理的事件不在附加有路由事件处理程序的元素的成员列表中,则有必要使用这种部分限定技术来附加事件处理程序。
<StackPanel
xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
x:Class="SDKSample.RoutedEventHandle"
Name="dpanel"
Button.Click="HandleClick"
>
<StackPanel.Resources>
<Style TargetType="{x:Type Button}">
<Setter Property="Height" Value="20"/>
<Setter Property="Width" Value="250"/>
<Setter Property="HorizontalAlignment" Value="Left"/>
</Style>
</StackPanel.Resources>
<Button Name="Button1">Item 1</Button>
<Button Name="Button2">Item 2</Button>
<TextBlock Name="results"/>
</StackPanel>
有关完整示例,请参见路由事件处理示例。