首页 新闻 搜索 专区 学院

WPF 子元素 不冒泡到主元素

0
悬赏园豆:10 [已解决问题] 解决于 2014-07-23 14:40

有一个自定义控件

现在想触发自定义控件的MouseEnter和MouseLeave事件,但是由于自定义控件里还含有子控件,由于子控件的MouseEnter和MouseLeave会冒泡到自定义控件的MouseEnter和MouseLeave 这样在控件内部移动时,会触发多次

请问如何阻止子控件的 事件冒泡

天浩-Jeffery的主页 天浩-Jeffery | 初学一级 | 园豆:14
提问于:2014-07-22 16:29
< >
分享
最佳答案
0

问题解决了,发现当自定义控件的主容器没有设置背景色(背景透明)时,在自定义控件主容器上的移动 不会触发MouseEnter和MouseLeave,然后进入用户控件的子控件时,才会触发Enter,离开子控件触发Leave,这样会触发多次,并且通过e.Handled无法阻止冒泡到 用户控件的MouseEnter和Leave,并且e.OriginalSource 始终是指代用户控件。但是设置背景后,情况就是只要移入自定义控件,就只冒泡一次,在子控件之间切换不会再次冒泡

天浩-Jeffery | 初学一级 |园豆:14 | 2014-07-23 14:17
其他回答(2)
0

e.Handled = true;

收获园豆:5
Launcher | 园豆:45045 (高人七级) | 2014-07-22 16:46

子控件在没有注册事件MouseEnter和MouseLeave的情况下呢?

子控件有很多层 不想遍历去注册事件

支持(0) 反对(0) 天浩-Jeffery | 园豆:14 (初学一级) | 2014-07-22 17:18

@天浩-Jeffery: 在你的自定义控件中设置 e.Handled = true,看能否通过 sender 和 MouseButtonEventArgs 来判断出是否需要设置 e.Handled = true.

支持(0) 反对(0) Launcher | 园豆:45045 (高人七级) | 2014-07-22 17:25
0

可以通过 e.OriginalSource  判断事件是由谁触发的

收获园豆:5
德年 | 园豆:810 (小虾三级) | 2014-07-23 14:06
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册