WPF冒泡事件
来源:互联网 发布:观看网络直播人群分析 编辑:程序博客网 时间:2024/05/02 02:36
今天看《WPF编程宝典》,看到了讲WPF冒泡事件一章,在这里出了问题一直没有解决,在网上搜也是这样,书上的原话是这样的:界面设计如下,有3个按钮并附加了Button.Click事件:
事件的函数体如下,根据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属性却能够获取单击来自哪个控件,然后可以通过判断,可以为不同的控件定义各自的处理事件。
如果容器中的控件对某一用户操作具有相同的响应则可以使用该方法。
初次写,不足之处还请各位见谅,有错误请不吝赐教,良辰在此谢过!
- WPF冒泡事件
- WPF事件中的冒泡路由事件
- WPF中的事件及冒泡事件和隧道事件(预览事件)的区别
- WPF中的事件及冒泡事件和隧道事件(预览事件)的区别
- wpf事件
- 事件冒泡
- 事件 冒泡
- 冒泡事件
- 冒泡事件
- 事件冒泡
- 冒泡事件
- 事件冒泡
- 事件冒泡
- 事件冒泡
- 事件冒泡
- 事件冒泡
- 事件冒泡
- 事件冒泡
- 用迭代法求 。求平方根的迭代公式为: X[n+1]=1/2(X[n]+a/X[n]) 要求前后两次求出的得差的绝对值少于0.00001。 输出保留3位小数
- opencv一个窗口显示多张图像
- lintcode- Flatten Binary Tree to Linked List-453
- Qt Resize与布局的冲突?
- windows7下从docker容器启动memcached服务的简单介绍
- WPF冒泡事件
- Test
- C# 之 获取当前路径
- String构造函数 拷贝构造函数 析构函数 赋值构造函数的实现
- R语言-数组到矩阵的转换
- 软件测试需要学习些什么技能
- 对观察结果的解释---一般系统论读书笔记
- leetcode系列(40)Merge K Sorted Lists
- OC内存管理初级