wpf - WPF:为什么 PreviewMouseLeftButtonDown EventTrigger 有效而 MouseLeftButtonDown 无效?
问题描述
请看这个EventTrigger
:
<ListView Name="ListViewFiles">
<i:Interaction.Triggers>
<i:EventTrigger EventName="PreviewMouseLeftButtonDown">
<i:InvokeCommandAction Command="{Binding ListViewItemMouseLeftButtonDownCommand}"
CommandParameter="{Binding ElementName=ListViewFiles, Path=SelectedItem}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</ListView>
所以我想实现两件事:
- 我尝试使用
MouseLeftButtonDown
而不是,PreviewMouseLeftButtonDown
但事件没有被触发(为什么??)。 - 当用户单击并按住左按钮时,我希望事件在
milliseconds
我当前使用的 500 之后触发timer
- 还有其他方法吗?
解决方案
MouseLeftButtonDown
由于 WPF 处理RoutedEvents
. 当 aRoutedEvent
被标记为“已处理”时,WPF 不会为它调用任何进一步的事件处理程序。
ListView
几乎肯定MouseLeftButtonDown
是在内部处理,可能是为了更改所选项目。因为MouseLeftButtonDown
是一个冒泡事件,这意味着它在ListView
将可视化树添加到您的代码之前在内部被标记为已处理,因此它永远不会到达。
PreviewMouseLeftButtonDown
另一方面,它是一个隧道事件,因此它在进入ListView
.
至于你问题的第二部分,我不知道有什么比使用某种计时器更好的方法来触发代码。此外,如果您只想在他们按住按钮一段时间后触发它,请确保您处理PreviewLeftMouseButtonUp
事件以关闭计时器,如果他们在时间结束之前释放按钮。
推荐阅读
- python - 如何使用 set_random_seed 获得相同的结果
- fmi - 如何使用 PyFMI 运行 EnergyPlus-FMU
- python - QPixmap(图像)的图块具有重叠区域
- python - 在 Windows 10 中为 python 3 创建虚拟环境时遇到问题
- java - 如何将参数发送到 AES 加密器?
- arrays - Swift 5根据对象值分组和拆分对象数组
- python - 如何使用 Mask R-CNN 和背景减法来掩盖敞篷卡车的负载?
- python - 如何将 PyCharm 文件中的数据导出到 Excel 工作表中?
- javascript - 防止iframe js自动滚动父页面
- html - 我尝试将 HTML 网站转换为 WordPress,但只显示内容并且 CSS 不起作用