首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WPF -了解RoutedEvents

WPF -了解RoutedEvents
EN

Stack Overflow用户
提问于 2010-09-26 01:30:12
回答 2查看 683关注 0票数 0

大家好,我正在学习WPF,目前我正在阅读有关RoutedEvents的文章。在“c#中的专业WPF”一书中,我提供了一些代码片段,如下所示

代码语言:javascript
复制
<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事件就会被引发,并通过可视化树向下移动。如果事件到达网格,则调用事件处理程序。然而,我错了,或者我做错了什么。谁能给我解释一下正常事件和路由事件之间的区别

编辑插入代码时发生了一些奇怪的事情。整个代码片段的实例,我得到的只有标签

EN

回答 2

Stack Overflow用户

发布于 2010-09-26 01:53:12

不知道你在说什么。基于RoutingStrategy,RoutedEvents可以在可视化树中向上或向下移动。默认情况下,RoutingStrategy设置为气泡(从子对象移动到父对象)。

我试过你的代码,它看起来像预期的那样运行。单击"Image and text label“,它会沿着可视化树向上传送: TextBlock -> StackPanel -> Label -> Grid

票数 0
EN

Stack Overflow用户

发布于 2010-09-26 04:42:18

的要点是,我看不到路由事件的区别/优势(从这个例子判断)。在常规的C#中,我会做同样的事情-向表单上的每个元素添加处理程序(就像在这里所做的那样)。

该示例的重点是展示将事件标记为已处理对路由行为有何影响。如果选中“处理第一个事件”复选框,然后单击其中一个内部控件,则仅在该控件上引发事件。如果取消选中它,它将在可视化树中的每个控件上引发。

示例作者处理树中每个对象上的事件的唯一原因是为了演示这一点。通常情况下,您不会这样做;您只需要在最高有用级别处理事件。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3794772

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档