我目前正在尝试在我的WP8应用中找到一种兼容MVVMLight的方式来使用手势。具体来说,我只想检测滑动/轻弹并将其绑定到我的视图模型中的RelayCommand。多年来我是否已经开发出任何我不知道的解决方案?
我事先做了一些研究,我提出的结果大多已经过时或不再存在。即:
toolkit:GestureListener
支持手势,但要求您将ViewModel与View结合使用。注意:发现toolkit:GestureListener
已被弃用。
答案 0 :(得分:1)
Joost Van Schaaik在wp7:http://dotnetbyexample.blogspot.be/2011/03/simple-windows-phone-7-silverlight.html
上创建了这样的行为可以通过@localjoost
在Twitter上与他联系答案 1 :(得分:0)
找到我的问题的答案。
我没有使用toolkit:GestureListener
,而是发现EventToCommand
与ManipulationDelta
或ManipulationCompleted
也有效:
<i:Interaction.Triggers>
<i:EventTrigger EventName="ManipulationDelta">
<Command:EventToCommand Command="{Binding SlideOutDeltaCommand, Mode=OneWay}" PassEventArgsToCommand="True"/>
</i:EventTrigger>
<i:EventTrigger EventName="ManipulationCompleted">
<Command:EventToCommand Command="{Binding SlideOutCompletedCommand, Mode=OneWay}" PassEventArgsToCommand="True"/>
</i:EventTrigger>
</i:Interaction.Triggers>
通过将EventArgs传递给ViewModel,您可以检测是否已发出滑动手势:
public RelayCommand<ManipulationDeltaEventArgs> SlideOutDeltaCommand
{
get;
private set;
}
private void OnSlideDelta(ManipulationDeltaEventArgs e)
{
var delta = e.CumulativeManipulation.Translation;
//If Change in X > Change in Y, its considered a horizontal swipe
var isDeltaHorizontal = Math.Abs(delta.X) > Math.Abs(delta.Y) ? true : false;
}
public MainViewModel()
{
SlideOutDeltaCommand = new RelayCommand<ManipulationDeltaEventArgs>((e) => OnSlideDelta(e));
}