【发布时间】:2017-08-31 09:17:28
【问题描述】:
我目前正在尝试实现一个可以通过触摸输入移动和缩放的 ImageViewer。 我已经在 Code Behind 的最近一个项目中实现了这些功能,但是我在 MVVM 的视图模型中很难做到这一点。
问题是,要让我的代码正常工作,我必须知道同时识别了多少个触摸输入。 在我的代码隐藏中,我使用了:
canvas.TouchesCaptured.Count()
ViewModel 不应该知道 View 的任何控件,因此将 Canvas 作为命令参数传递不是可行的方法。
在画布旁边,我需要触发的 TouchEvent 的 TouchEventArgs 来确定 TouchEvent 在画布上的位置。 使用 Prism,我能够将 TouchEventArgs 放入 ViewModel。
<i:Interaction.Triggers>
<i:EventTrigger EventName="TouchDown">
<prism:InvokeCommandAction Command="{Binding TouchDownCommand}"
</i:EventTrigger>
</i:Interaction.Triggers>
prism:InvokeCommandAction 自动将 EventArgs 设置为 CommandParameter 以进行说明。
要确定触控事件在画布上的位置,我需要画布和触控事件。 在我的 Code-Behind 中,它看起来像这样:
startingPoint = e.GetTouchPoint(canvas);
任何人知道如何在不违反 MVVM 模式的情况下解决这个问题?
【问题讨论】:
-
对于“使用触摸输入移动和缩放”,请查看操作事件,例如 ManipulationDelta 等。另请参阅 Touch and Manipulation。