【WPF】ListBox嵌套与事件冒泡
原文:【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冒泡路由事件
posted on 2018-09-11 17:06 NET未来之路 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/lonelyxmas/p/9628886.html

【WPF】ListBox嵌套与事件冒泡相关推荐

  1. WPF路由事件(冒泡事件和隧道事件)

    隧道事件: 在视觉树 从上往下,从window->实际源头,一般为被点击的控件. 有preview标注的的都是隧道事件 冒泡事件: 在视觉树,丛下往上,点击的控件,一直到最上层(window) ...

  2. JavaScript 事件冒泡简介及应用(转)

    http://www.jb51.net/article/21801.htm 一.什么是事件冒泡 在一个对象上触发某类事件(比如单击onclick事件),如果此对象定义了此事件的处理程序,那么此事件就会 ...

  3. javascript中的事件冒泡、事件捕获和事件执行顺序

    谈起JavaScript的 事件,事件冒泡.事件捕获.阻止默认事件这三个话题,无论是面试还是在平时的工作中,都很难避免. DOM事件标准定义了两种事件流,这两种事件流有着显著的不同并且可能对你的应用有 ...

  4. java冒泡函数解释,JS DOM操作 函数 事件 阻止事件冒泡

    一 函数 1.字符串函数 s.tolowerCase( ):    -- 变小写 s.toupperCase( ):   -- 变大写 s.substr( 2 , 8 ):     -- 截取     ...

  5. js 事件流的事件冒泡和事件捕获与阻止事件传播

    为了方便引入事件流的概念,我们先来说说什么是事件. 事件就是用户或浏览器自身执行的某种动作.换句话说,我们在浏览网页或者 APP 时,通常会在设备上产生很多交互性的操作,例如点击.选择.滚动屏幕.键盘 ...

  6. addeventlistener事件第三个参数_简析JavaScript 事件绑定、事件冒泡、事件捕获和事件执行顺序...

    这篇文章主要介绍了javaScript 事件绑定.事件冒泡.事件捕获和事件执行顺序整理总结的相关资料 (一)事件绑定的几种方式 javascript给DOM绑定事件处理函数总的来说有2种方式:在htm ...

  7. jlist放jbutton 按钮事件失效_JS DOM操作 函数 事件 阻止事件冒泡

    一 函数 1.字符串函数 s.tolowerCase( ): -- 变小写s.toupperCase( ): -- 变大写s.substr( 2 , 8 ): -- 截取 从索引2开始截取,截取8个字 ...

  8. js事件冒泡和事件委托

    原文:js事件冒泡和事件委托 js事件冒泡 js所谓的事件冒泡就是子级元素的某个事件被触发,它的上级元素的该事件也被递归执行 html: <ul class="clearfix&quo ...

  9. javascript的事件冒泡,阻止事件冒泡和事件委托, 事件委托是事件冒泡的一个应用。...

    2018年12月13日更新 <!DOCTYPE html> <html lang="en"> <head><meta charset=&q ...

最新文章

  1. BZOJ 2806 Luogu P4022 [CTSC2012]Cheat (广义后缀自动机、DP、二分、单调队列)
  2. 电厂运维的cis数据_变配电智能化运维作用和优点,智慧供配电物联网
  3. gcc android开发环境,[RK3399][Android7.1]开发环境搭建
  4. 深入理解C语言的函数调用过程
  5. python中__init__.py的作用、module和package
  6. linux内核源码代码量,Linux内核源代码数量已经超过1000万行
  7. 那些ubuntu创建用户踩过的坑
  8. PHP水果店管理系统,水果店连锁店管理系统实现一体化功能
  9. leetcode128 最长连续序列
  10. BugkuCTF-MISC题普通的二维码
  11. JavaScript操作Table
  12. 一个肉夹馍引起的思考
  13. 【医疗影像处理】使用GMM分割3D T1得到wm/gm/csf/background
  14. 拯救行动第二季 - 答题赢游戏机活动已经开放!
  15. 使用JAVA调用MATLAB算法程序方式——使用复杂算例进行完整说明,包括参数传递
  16. Unity 安装个人免费版
  17. 涂涂乐的详细实现之三--文件IO操作
  18. java 线性回归_java实现简单线性回归
  19. 如何打开扩展名为.DB 文件. 使用sqlite3 很方便
  20. Asynchronous Methods for Deep Reinforcement Learning-笔记

热门文章

  1. 交换技术、覆盖技术、虚拟存储技术的区分
  2. SQL注入之二次注入(sql-lab第24关)
  3. 在代码段中安排自己定义的数据
  4. C 语言内联汇编介绍
  5. Head First JSP---随笔八(传统标记)
  6. 计算机界名人榜-----约翰·冯·诺依曼
  7. 异常解决(一)-- RuntimeError: expected device cpu but got device cuda:0
  8. Java 多重catch语句的使用
  9. 浅谈以太坊智能合约的设计模式与升级方法
  10. 如何构建一个分布式爬虫:基础篇