大家好,我正在学习WPF,目前我正在阅读有关RoutedEvents的文章。在“c#中的专业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#中,我会做同样的事情-向表单上的每个元素添加处理程序(就像在这里所做的那样)。
起初,当我读到路由事件时,它似乎是这样工作的。我为我的表单/控件/窗口上所有可视元素的父元素添加了事件处理程序。如果我点击了child,mousedown事件就会被引发,并通过可视化树向下移动。如果事件到达网格,则调用事件处理程序。然而,我错了,或者我做错了什么。谁能给我解释一下正常事件和路由事件之间的区别
编辑插入代码时发生了一些奇怪的事情。整个代码片段的实例,我得到的只有标签
发布于 2010-09-26 01:53:12
不知道你在说什么。基于RoutingStrategy,RoutedEvents可以在可视化树中向上或向下移动。默认情况下,RoutingStrategy设置为气泡(从子对象移动到父对象)。
我试过你的代码,它看起来像预期的那样运行。单击"Image and text label“,它会沿着可视化树向上传送: TextBlock -> StackPanel -> Label -> Grid
发布于 2010-09-26 04:42:18
的要点是,我看不到路由事件的区别/优势(从这个例子判断)。在常规的C#中,我会做同样的事情-向表单上的每个元素添加处理程序(就像在这里所做的那样)。
该示例的重点是展示将事件标记为已处理对路由行为有何影响。如果选中“处理第一个事件”复选框,然后单击其中一个内部控件,则仅在该控件上引发事件。如果取消选中它,它将在可视化树中的每个控件上引发。
示例作者处理树中每个对象上的事件的唯一原因是为了演示这一点。通常情况下,您不会这样做;您只需要在最高有用级别处理事件。
https://stackoverflow.com/questions/3794772
复制相似问题