gpt4 book ai didi

c# - MVVM中的Canvas上的TouchEvents

转载 作者:行者123 更新时间:2023-12-03 10:43:01 25 4
gpt4 key购买 nike

我目前正在尝试实现ImageViewer,并可以通过触摸输入进行移动和缩放。
我已经在Code Behind的最近项目中实现了这些功能,但是我在MVVM的View Model中却很难做到。

问题是,要使代码正常工作,我必须知道同时可以识别多少个触摸输入。
在我的代码隐藏中,我使用了:

canvas.TouchesCaptured.Count()

ViewModel不应该不知道View的任何控件,因此将Canvas作为命令参数传递不是可行的方法。

在 Canvas 旁边,我需要触发的TouchEvent的TouchEventArgs来确定TouchEvent在 Canvas 上的位置。
使用Prism,我能够将TouchEventArgs放入ViewModel。
 <i:Interaction.Triggers>
<i:EventTrigger EventName="TouchDown">
<prism:InvokeCommandAction Command="{Binding TouchDownCommand}"
</i:EventTrigger>
</i:Interaction.Triggers>

pyramid:InvokeCommandAction自动将EventArgs设置为CommandParameter进行说明。

为了确定TouchEvent在Canvas上的位置,我需要 Canvas 和TouchEvent。
在我的代码隐藏中,它看起来像这样:
startingPoint = e.GetTouchPoint(canvas);

任何人都知道如何在不违反MVVM模式的情况下解决此问题?

最佳答案

您可以尝试编写Blend行为,该行为封装Canvas事件处理并公开命令(例如,特别是ManipulationDelta)。您甚至可以将一个属性添加到公开TouchesCaptured值的行为(在ManipulationDelta事件期间)。

例如

<Canvas>
<i:Interaction.Behaviors>
<bhv:CanvasBehavior ManipulationDeltaCommand="{Binding MyViewModelCommand}" TouchPointCount="{Binding MyViewModelTouchPointCount}" />
</i:Interaction.Behaviors>
</Canvas>

关于c# - MVVM中的Canvas上的TouchEvents,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45977760/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com