首页 > 解决方案 > 当 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 对我来说不是一个选项。

标签: wpflistboxdouble-clickmultipleselection

解决方案


推荐阅读