首页 > 解决方案 > 窗口 10 上的 WPF Listview 触摸问题:“触发了另一个数据模板的事件,而它可能不会发生”

问题描述

在带有触摸屏的 Windows 10 上使用 WPF 应用程序时,我们遇到了列表视图的问题。使用鼠标时,它工作正常。

我们创建了一个简单的测试项目,用于在 windows 10 上模拟问题,可以在GitHub上找到。在MSDN上还创建了一张票

简而言之,以下是技术设置的摘要:

这通常工作得很好,但是有时,当触摸复选框时,会触发另一个模板的 PreviousMouseDown。

我希望这种行为可能不会发生,对吗?

我们找到了解决此问题的方法(*),但没有找到根本原因。

为什么会触发另一个模板的事件?

我开始相信这可能是 WPF Listview 和触摸行为的问题?

(*)如果我们知道有时某个事件是从错误的模板触发的,我们会验证每个事件是否该事件源自正确的模板,如果不是,我们什么也不做。

在下面,您可以看到当快速点击复选框时触发了 clickevent。

用途

下面是代码的更多细节:

数据模板

列表显示

代码隐藏

下面概述了我们为解决它而采取的步骤,但没有一个会导致解决方案。

在此处输入图像描述

标签: wpflistvieweventstouchdatatemplate

解决方案


由于 WPF 支持触摸并且屏幕上的触摸也被“转换”为 mousedown 事件,所以我看不出为什么不在触摸屏上使用 previewMouseDown 事件的问题。我也没有发现微软的任何官方文档不这样做。

无论如何,我无法再重现这样的问题,即触摸 listviewitem 正在调用列表中另一个 listviewitem 模板的另一个 previeuwMouseDown 事件...。

通过 Touchdown 事件更改 PrevieuwMouseDown 事件!

我很高兴找到解决方案,但是根据许多在线搜索,我觉得 WPF 存在很多问题,而且通常不清楚根本原因是什么。就像在这种情况下,我通过反复试验找到了解决方案,但为什么在使用 previewMouseDown 时会出现问题,令人费解。


推荐阅读