WPF事件中的冒泡路由事件

来源:互联网 发布:手机淘宝怎么看淘友 编辑:程序博客网 时间:2024/05/02 00:44

   wpf中的控件都直接或者间接继承自UIElement ,继承自它将拥有MouseUp和MouseDown两个方法,冒泡路由事件利用了控件都有这个方法的特性。单击一个元素,会触发他的单击事件,然后触发他的父元素,依次往上一级,直到顶级元素(一般为window)。附上代码

布局xaml:
<Window x:Class="冒泡路由事件.MainWindow"        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"        xmlns:local="clr-namespace:冒泡路由事件"        mc:Ignorable="d"        Title="MainWindow" Height="450" Width="329" MouseUp="SomethingClicked">    <Grid Margin="3" MouseUp="SomethingClicked">        <Grid.RowDefinitions>            <RowDefinition Height="auto"/>            <RowDefinition Height="*"/>            <RowDefinition Height="auto"/>            <RowDefinition Height="auto"/>        </Grid.RowDefinitions>        <Label Margin="5" Grid.Row="0" HorizontalAlignment="Left" Background="AliceBlue"                BorderBrush="Black" BorderThickness="1" MouseUp="SomethingClicked">            <StackPanel MouseUp="SomethingClicked">                <TextBlock MouseUp="SomethingClicked">Image and Text Lable</TextBlock>                <TextBlock MouseUp="SomethingClicked">Courtesy of the Stackpanel</TextBlock>            </StackPanel>        </Label>        <ListBox Grid.Row="1" MouseUp="SomethingClicked" Name="listbox" Margin="5"></ListBox>        <CheckBox Grid.Row="2" Margin="5" Name="checkbox">Hand first event</CheckBox>        <Button Grid.Row="3" Margin="5" Padding="3" HorizontalAlignment="Right"                Name="btn" Click="btn_Click">Clear list</Button>        </Grid></Window>

namespace 冒泡路由事件{    /// <summary>    /// MainWindow.xaml 的交互逻辑    /// </summary>    public partial class MainWindow : Window    {        protected int eventcounter = 0;        public MainWindow()        {            InitializeComponent();        }                private void SomethingClicked(object sender, MouseButtonEventArgs e)        {            eventcounter++;                                    //计数加一            string messages = "#" + eventcounter + ":\n" + "Sender:" + sender + "\n" + "source:" + e.Source + "\n" + "original:" + e.OriginalSource + "\n";            listbox.Items.Add(messages);            e.Handled = (Boolean)checkbox.IsChecked;                        //选中就handled住事件,不路由        }        private void btn_Click(object sender, RoutedEventArgs e)        {            listbox.Items.Clear();            eventcounter = 0;        }    }}

为控件添加统一的鼠标抬起事件SomethingClicked,在listbox中展示出事件发生的对象,源对象
效果如下:

可以看出冒泡的过程。
0 0
原创粉丝点击