【WPF】ListBox嵌套与事件冒泡
问题:两个ListBox嵌套后,当鼠标位于内部ListBox上,鼠标滚轮事件会被内部ListBox接收,导致外层ListBox不能用鼠标滚轮滑动!现在的需求是该事件要能给外部ListBox处理,即嵌套的ListBox应该由外层ListBox来接收鼠标滚轮事件。
<ListBox><ListBox><ListBox.ItemTemplate><DataTemplate> <!-- 省略 --></DataTemplate><ListBox.ItemTemplate></ListBox> </ListBox>
思路:根据WPF的冒泡路由事件,鼠标滚轮事件首先会被内层的ListBox接收。此时该事件被拦截后直接将它标记为已处理(不让内部ListBox的滚轮滑动),然后再手动激发一个鼠标滚轮事件,该事件自动向上冒泡就能被外层ListBox接收到。
给内层ListBox注册一个鼠标滚轮事件。
<ListBox x:Name="innerLB" PreviewMouseWheel="innerLB_PreviewMouseWheel">
后台代码处理该事件。
/// <summary> /// 问题:内层的ListBox拦截了鼠标滚轮事件,导致外层ListBox不能用鼠标滚轮滑动。 /// 办法:内层ListBox拦截鼠标滚轮事件后,再手动激发一个鼠标滚轮事件,让事件冒泡给外层ListBox接收到。 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void innerLB_PreviewMouseWheel(object sender, MouseWheelEventArgs e) {if (!e.Handled){// 内层ListBox拦截鼠标滚轮事件e.Handled = true;// 激发一个鼠标滚轮事件,冒泡给外层ListBox接收到var eventArg = new MouseWheelEventArgs(e.MouseDevice, e.Timestamp, e.Delta);eventArg.RoutedEvent = UIElement.MouseWheelEvent;eventArg.Source = sender;var parent = ((Control)sender).Parent as UIElement;parent.RaiseEvent(eventArg);} }
参考:
- ListBox拦截滚轮滚动事件
- WPF冒泡路由事件
转载于:https://www.cnblogs.com/lonelyxmas/p/9628886.html
【WPF】ListBox嵌套与事件冒泡相关推荐
- WPF路由事件(冒泡事件和隧道事件)
隧道事件: 在视觉树 从上往下,从window->实际源头,一般为被点击的控件. 有preview标注的的都是隧道事件 冒泡事件: 在视觉树,丛下往上,点击的控件,一直到最上层(window) ...
- JavaScript 事件冒泡简介及应用(转)
http://www.jb51.net/article/21801.htm 一.什么是事件冒泡 在一个对象上触发某类事件(比如单击onclick事件),如果此对象定义了此事件的处理程序,那么此事件就会 ...
- javascript中的事件冒泡、事件捕获和事件执行顺序
谈起JavaScript的 事件,事件冒泡.事件捕获.阻止默认事件这三个话题,无论是面试还是在平时的工作中,都很难避免. DOM事件标准定义了两种事件流,这两种事件流有着显著的不同并且可能对你的应用有 ...
- java冒泡函数解释,JS DOM操作 函数 事件 阻止事件冒泡
一 函数 1.字符串函数 s.tolowerCase( ): -- 变小写 s.toupperCase( ): -- 变大写 s.substr( 2 , 8 ): -- 截取 ...
- js 事件流的事件冒泡和事件捕获与阻止事件传播
为了方便引入事件流的概念,我们先来说说什么是事件. 事件就是用户或浏览器自身执行的某种动作.换句话说,我们在浏览网页或者 APP 时,通常会在设备上产生很多交互性的操作,例如点击.选择.滚动屏幕.键盘 ...
- addeventlistener事件第三个参数_简析JavaScript 事件绑定、事件冒泡、事件捕获和事件执行顺序...
这篇文章主要介绍了javaScript 事件绑定.事件冒泡.事件捕获和事件执行顺序整理总结的相关资料 (一)事件绑定的几种方式 javascript给DOM绑定事件处理函数总的来说有2种方式:在htm ...
- jlist放jbutton 按钮事件失效_JS DOM操作 函数 事件 阻止事件冒泡
一 函数 1.字符串函数 s.tolowerCase( ): -- 变小写s.toupperCase( ): -- 变大写s.substr( 2 , 8 ): -- 截取 从索引2开始截取,截取8个字 ...
- js事件冒泡和事件委托
原文:js事件冒泡和事件委托 js事件冒泡 js所谓的事件冒泡就是子级元素的某个事件被触发,它的上级元素的该事件也被递归执行 html: <ul class="clearfix&quo ...
- javascript的事件冒泡,阻止事件冒泡和事件委托, 事件委托是事件冒泡的一个应用。...
2018年12月13日更新 <!DOCTYPE html> <html lang="en"> <head><meta charset=&q ...
最新文章
- BZOJ 2806 Luogu P4022 [CTSC2012]Cheat (广义后缀自动机、DP、二分、单调队列)
- 电厂运维的cis数据_变配电智能化运维作用和优点,智慧供配电物联网
- gcc android开发环境,[RK3399][Android7.1]开发环境搭建
- 深入理解C语言的函数调用过程
- python中__init__.py的作用、module和package
- linux内核源码代码量,Linux内核源代码数量已经超过1000万行
- 那些ubuntu创建用户踩过的坑
- PHP水果店管理系统,水果店连锁店管理系统实现一体化功能
- leetcode128 最长连续序列
- BugkuCTF-MISC题普通的二维码
- JavaScript操作Table
- 一个肉夹馍引起的思考
- 【医疗影像处理】使用GMM分割3D T1得到wm/gm/csf/background
- 拯救行动第二季 - 答题赢游戏机活动已经开放!
- 使用JAVA调用MATLAB算法程序方式——使用复杂算例进行完整说明,包括参数传递
- Unity 安装个人免费版
- 涂涂乐的详细实现之三--文件IO操作
- java 线性回归_java实现简单线性回归
- 如何打开扩展名为.DB 文件. 使用sqlite3 很方便
- Asynchronous Methods for Deep Reinforcement Learning-笔记