window 10 上的 WPF Listview 触摸问题:"an event of another datatemplate is triggered while it may not happen"
WPF Listview touch issue on window 10: "an event of another datatemplate is triggered while it may not happen"
在 windows10 触摸屏 上使用 WPF 应用程序时,我们遇到了列表视图问题。使用鼠标时它工作正常。
我们创建了一个简单的测试项目,用于模拟windows10上的问题,可以在GitHub. A ticket is also created on MSDN
上找到
简而言之,技术设置总结如下:
- 我们使用分组列表视图,并且对于每个组,一个切换按钮和
另一个(内部)列表视图。
- 内部列表视图使用绑定到
数据模板选择器,用于选择数据模板。
- 将有 3 个数据模板(复选框、数字、文本)
根据有界模型的类型 属性 选择。
- 每个数据模板都有一个堆栈面板。文中的stackpanel en
数字数据模板连接到 PreviewMouseDown 事件。
重要的是,复选框中的堆栈面板未连接到事件。
This works in general well, however sometimes, when touching the checkbox, the
PreviousMouseDown of another template is triggered.
我认为这种行为可能不会发生,对吗?
We found a workaround (*) for this issue but we didn't find the root
cause.
为什么触发了另一个模板的事件?
I'm starting to believe that this could be an issue with WPF Listview
and touch behavior?
(*) 如果我们知道有时事件是从错误的模板触发的,
我们验证每个事件是否来自正确的模板,如果不是,我们什么也不做。
您可以在下面看到当快速点击复选框时触发了点击事件。
下面是代码的更多细节:
- 数据模板和选择器
- 带有内部列表视图和项目模板选择器的分组列表视图
- 在隐藏代码和 PreviewMouseDown 事件的处理程序下方
Below an overview of the steps we have been taken in order to resolve
it, but none lead into a solution.
由于 WPF 支持触摸并且屏幕上的触摸也被“转换”为 mousedown 事件,所以我不明白为什么不在触摸屏上使用 previewMouseDown 事件。我也没有找到任何微软的官方文档不这样做。
无论如何,我无法再重现触摸 listviewitem 调用列表中另一个 listviewitem 的模板的另一个 previeuwMouseDown 事件的问题....
Changing the PrevieuwMouseDown event by a Touchdown event!
很高兴找到解决方案,但是根据许多在线搜索,我觉得 WPF 上的 thouch 存在很多问题,而且通常不清楚根本原因是什么。像这种情况我通过反复试验找到了解决方案,但是为什么在使用previewMouseDown时出现问题,令人费解。
在 windows10 触摸屏 上使用 WPF 应用程序时,我们遇到了列表视图问题。使用鼠标时它工作正常。
我们创建了一个简单的测试项目,用于模拟windows10上的问题,可以在GitHub. A ticket is also created on MSDN
上找到简而言之,技术设置总结如下:
- 我们使用分组列表视图,并且对于每个组,一个切换按钮和 另一个(内部)列表视图。
- 内部列表视图使用绑定到 数据模板选择器,用于选择数据模板。
- 将有 3 个数据模板(复选框、数字、文本) 根据有界模型的类型 属性 选择。
- 每个数据模板都有一个堆栈面板。文中的stackpanel en 数字数据模板连接到 PreviewMouseDown 事件。 重要的是,复选框中的堆栈面板未连接到事件。
This works in general well, however sometimes, when touching the checkbox, the PreviousMouseDown of another template is triggered.
我认为这种行为可能不会发生,对吗?
We found a workaround (*) for this issue but we didn't find the root cause.
为什么触发了另一个模板的事件?
I'm starting to believe that this could be an issue with WPF Listview and touch behavior?
(*) 如果我们知道有时事件是从错误的模板触发的, 我们验证每个事件是否来自正确的模板,如果不是,我们什么也不做。
您可以在下面看到当快速点击复选框时触发了点击事件。
下面是代码的更多细节:
- 数据模板和选择器
- 带有内部列表视图和项目模板选择器的分组列表视图
- 在隐藏代码和 PreviewMouseDown 事件的处理程序下方
Below an overview of the steps we have been taken in order to resolve it, but none lead into a solution.
由于 WPF 支持触摸并且屏幕上的触摸也被“转换”为 mousedown 事件,所以我不明白为什么不在触摸屏上使用 previewMouseDown 事件。我也没有找到任何微软的官方文档不这样做。
无论如何,我无法再重现触摸 listviewitem 调用列表中另一个 listviewitem 的模板的另一个 previeuwMouseDown 事件的问题....
Changing the PrevieuwMouseDown event by a Touchdown event!
很高兴找到解决方案,但是根据许多在线搜索,我觉得 WPF 上的 thouch 存在很多问题,而且通常不清楚根本原因是什么。像这种情况我通过反复试验找到了解决方案,但是为什么在使用previewMouseDown时出现问题,令人费解。