WPF冒泡事件
2015-10-21 21:20
507 查看
今天看《WPF编程宝典》,看到了讲WPF冒泡事件一章,在这里出了问题一直没有解决,在网上搜也是这样,书上的原话是这样的:界面设计如下,有3个按钮并附加了Button.Click事件:
![](https://img-blog.csdn.net/20151021205053320)
事件的函数体如下,根据Button的Name属性来获取事件的发送者:
![](https://img-blog.csdn.net/20151021205125284)
但是自己写了之后发现不论点击哪个按钮,sender一直是按钮容器StackPanel对象,无法转换为Button 对象,因此函数中对各个按钮设置的事件也无法调用。这里的原因我目前也还没有弄明白(先留个坑,以后再填)。
难道是因为StackPanel位于顶层,Click事件都被它拦截了吗,但是StackPanel对象并没有Click事件啊!
经过自己看书之后,发现第二个参数RoutedEventArgs的source属性中对于鼠标事件时,表示的是事件发生时鼠标指针元素下面所有元素中最靠上的元素。这样不就可以获取StackPanel容器中的Button吗,于是自己编写尝试了一下:
运行之后,点击btn1,弹出messagebox “btn1”,依次单击3个按钮,分别弹出各自的消息窗。说明在StackPanel声明的Button.Click事件能被按钮获取;而在StackPanel容器按钮之外的位置单击则不会触发事件。
如果容器中的控件对某一用户操作具有相同的响应则可以使用该方法。
初次写,不足之处还请各位见谅,有错误请不吝赐教,良辰在此谢过!
事件的函数体如下,根据Button的Name属性来获取事件的发送者:
但是自己写了之后发现不论点击哪个按钮,sender一直是按钮容器StackPanel对象,无法转换为Button 对象,因此函数中对各个按钮设置的事件也无法调用。这里的原因我目前也还没有弄明白(先留个坑,以后再填)。
难道是因为StackPanel位于顶层,Click事件都被它拦截了吗,但是StackPanel对象并没有Click事件啊!
经过自己看书之后,发现第二个参数RoutedEventArgs的source属性中对于鼠标事件时,表示的是事件发生时鼠标指针元素下面所有元素中最靠上的元素。这样不就可以获取StackPanel容器中的Button吗,于是自己编写尝试了一下:
private void btn_Click(object sender, RoutedEventArgs e) { if(e.Source==cmd1) { MessageBox.Show("cmd1"); } else if (e.Source == cmd2) { MessageBox.Show("cmd2"); } else if (e.Source == cmd3) { MessageBox.Show("cmd3"); } else { MessageBox.Show("null"); } }
运行之后,点击btn1,弹出messagebox “btn1”,依次单击3个按钮,分别弹出各自的消息窗。说明在StackPanel声明的Button.Click事件能被按钮获取;而在StackPanel容器按钮之外的位置单击则不会触发事件。
总结:
在父容器中定义同一事件,例如Button.Click事件,则容器中所有Button都会在单击的时候激活该事件,但是我在编程过程中同过教程中的sender确无法判断单击来自哪个控件。然而通过RoutedEventArgs的source属性却能够获取单击来自哪个控件,然后可以通过判断,可以为不同的控件定义各自的处理事件。如果容器中的控件对某一用户操作具有相同的响应则可以使用该方法。
初次写,不足之处还请各位见谅,有错误请不吝赐教,良辰在此谢过!
相关文章推荐
- C#及WPF获取本机所有字体和颜色的方法
- WPF MVVM示例讲解
- PowerShell中调用WPF生成炫酷窗口实例
- 分享下手机软件界面设计浅析
- WPF实现类似360安全卫士界面的程序源码分享
- C#中WPF使用多线程调用窗体组件的方法
- WPF实现渐变淡入淡出的登陆窗口效果
- WPF的数据绑定详细介绍
- WPF绑定实例详解
- jQuery中阻止冒泡事件的方法介绍
- Js冒泡事件详解及阻止示例
- jquery的冒泡事件的阻止与允许(三种实现方法)
- 关于WPF使用MultiConverter控制Button状态的详细介绍
- 如何搭建新的WPF项目框架
- 关于IE浏览器以及Firefox下的javascript冒泡事件的响应层级
- 解析WPF实现音频文件循环顺序播放的解决方法
- JS冒泡事件的快速解决方法
- JS阻止冒泡事件以及默认事件发生的简单方法
- js阻止默认事件与js阻止事件冒泡示例分享 js阻止冒泡事件
- 用vs2012创建第一个wpf应用