嗨,我正在学习 WPF,目前我正在阅读有关 RoutedEvents 的信息。在“C#中的Pro WPF”一书中,我在下面介绍了一些代码片段
<Window x:Class="RoutedEventsLearning.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300" MouseUp="SomethingClicked" >
<Grid Margin="3" MouseUp="SomethingClicked">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"></RowDefinition>
<RowDefinition Height="*"></RowDefinition>
<RowDefinition Height="Auto"></RowDefinition>
<RowDefinition Height="Auto"></RowDefinition>
</Grid.RowDefinitions>
<Label Margin="5" Grid.Row="0" HorizontalAlignment="Left"
Background="AliceBlue" BorderBrush="Black" BorderThickness="1"
MouseUp="SomethingClicked">
<StackPanel MouseUp="SomethingClicked">
<TextBlock Margin="3"
MouseUp="SomethingClicked">
Image and text label</TextBlock>
<Image Stretch="None"
MouseUp="SomethingClicked" />
<TextBlock Margin="3"
MouseUp="SomethingClicked">
Courtesy of the StackPanel</TextBlock>
</StackPanel>
</Label>
<ListBox Grid.Row="1" Margin="5" Name="lstMessages"></ListBox>
<CheckBox Grid.Row="2" Margin="5" Name="chkHandle">
Handle first event</CheckBox>
</Grid>
</Window>
关键是我看不到路由事件的区别/优势(通过这个例子判断)。在常规的 C# 中,我会做同样的事情 - 为表单上的每个元素添加处理程序(就像在此处完成的那样)。
起初,当我阅读有关路由事件的信息时,它似乎是这样工作的。我为我的表单/控件/窗口上的所有可视元素的父级添加事件处理程序。如果我单击子项,则会引发 mousedown 事件并通过可视化树向下传播。如果事件到达网格,则调用事件处理程序。但是我错了,或者我做错了什么。有人可以解释一下正常事件和路由事件之间的区别吗
编辑插入代码时发生了一些奇怪的事情。插入整个代码片段我只得到标签