当 ListBox.SelectionMode 为 Multiple 时如何处理双击列表框项

问题描述

[.NET Framework 4.x,WPF]

我需要处理对具有 ListViewSelectionMode="Multiple" 控件中的项目的双击。单击应切换项目的选择状态,而双击应触发自定义操作而不影响项目的选择状态。到目前为止,我还没有能够以令人满意的方式完成这项工作:

当我使用 (Preview)MouseDoubleClick 事件处理程序时,双击将切换选择状态,就像我执行了单击一样。当我使用常规的 (Preview)MouseLeftButtonDown 事件处理程序并检查 MouseButtonEventArgs.ClickCount >= 2 时,项目的选择状态将切换两次 - 这比前者更好,因为在它结束时项目恢复到所需状态 - 但是它至少仍然是一个外观问题,因为您会看到项目的选择状态发生变化——此外,任何对选择变化做出反应的事件处理程序都将不必要地触发——两次。

当我使用 PreviewMouseLeftButtonDown 时,设置 e.Handled = true,然后在调用我的自定义操作之前检查 e.ClickCount >= 2,然后双击不再更改选择 - 但是,单击也不更改。

作为最后一次尝试的扩展,是否有办法重新引发我用 e.Handled = true 抑制的常规单击事件?当在给定的时间间隔内没有发生第二次点击时(类似于 this example 的行为实现)? 我目前不需要专用的单击处理程序。在这种情况下,我只想要 ListBox 的默认行为。


注意:在任何人提到它之前:我已经在使用自定义行为和命令以对 MVVM 友好的方式处理这个问题 - 这不会改变 .NET 4.x 的 ListBox 对双击做出愚蠢反应的根本问题SelectionModeMultiple - 不幸的是,升级到 .NET5 或使用不同的 SelectionMode 目前对我来说不是一种选择。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...