wpf - 当 ListBox.SelectionMode 为 Multiple 时如何处理列表框项目的双击
问题描述
[.NET 框架 4.x,WPF]
我需要处理对ListView
具有SelectionMode="Multiple"
. 单击应该切换项目的选择状态,而双击应该触发自定义操作而不影响项目的选择状态。到目前为止,我还未能以令人满意的方式完成此任务:
当我使用(Preview)MouseDoubleClick
事件处理程序时,双击将切换选择状态,就像我执行了单击一样。当我使用常规(Preview)MouseLeftButtonDown
事件处理程序并检查MouseButtonEventArgs.ClickCount >= 2
项目的选择状态时,将切换两次——这比前者好,因为在它结束时项目又回到了所需的状态——但它仍然至少是一个外观问题,因为你看到了项目的选择状态更改 - 此外,任何对选择更改做出反应的事件处理程序都将不必要地触发 - 两次。
当我在调用我的自定义操作之前使用PreviewMouseLeftButtonDown
,设置e.Handled = true
然后检查时,e.ClickCount >= 2
双击不再更改选择 - 但是,单击也不会。
作为最后一次尝试的扩展,有没有办法重新引发我抑制的常规单击事件e.Handled = true
?当在给定的时间间隔内没有发生第二次点击时(类似于此示例中的行为实现)?我目前不需要专用的单击处理程序。在这种情况下,我只想要ListBox
' 的默认行为。
注意:在任何人提到它之前:我已经在使用自定义行为和命令以对 MVVM 友好的方式来处理这个问题 - 这不会改变 .NET 4.x 的 ListBox 对双击做出愚蠢反应的根本问题SelectionMode
-Multiple
不幸的是目前,升级到 .NET5 或使用不同的 SelectionMode 对我来说不是一个选项。
解决方案
推荐阅读
- usb-drive - 从 U 盘获取生产日期
- python - 无法在 google colab 上导入 pytorch_lightning
- azure-ad-b2c - 如何为 Azure AD B2C 电话登录添加“重新发送代码”
- python - 使用硒进行网页抓取时,我没有获得时间价值
- pipeline - Dask:构建和执行高效的管道
- python - 如何拟合 sinc 平方函数?
- delphi - Delphi OpenDialog文件名显示问题
- recursion - Prolog:递归后继定义的自然数乘法谓词不终止
- java - 尝试运行 uiautomatorviewer 并收到以下错误:“-Djava.ext.dirs=..\lib\x86_64;..\lib 不受支持。请改用 -classpath。”
- typescript - TypeScript 中的函数链工厂保留输入/输出类型?