MR.Gestures是处理Xamarin.Forms移动应用中的所有触摸手势。Xamarin是开发用于不同移动操作系统的移动应用程序的好工具,但是它不具备任何触摸屏设备所需的基本功能,并且不能执行不同的触摸手势。MR手势在页面上添加低,高,轻敲,双击,长按,慢跑,旋转等事件。当用户在元素上执行触摸手势时,将发生这些事件。
添加您要听手势的处理程序
在这里应该调用LongPressed该方法Red_LongPressed。该方法必须在像这样的文件后面的代码中定义
void Red_LongPressed(object sender, MR.Gestures.LongPressEventArgs e)
{
Console.WriteLine("BoxViewXaml.Red_LongPressed method called");
}
2、代码中的事件处理程序
当然,您可以在代码中执行相同的操作。带有lambda表达式
var box1 = new MR.Gestures.BoxView { Color = Color.Red };
box1.LongPressed += (s, e) => Console.WriteLine("Code: Red LongPressed");
或通过将方法分配为处理程序。
box1.LongPressed += Red_LongPressed;
3、XAML中的命令
但是恕我直言,如果您真的想将视图与任何代码分开,则该视图应位于XAML中。因此,除了事件处理程序之外,您还可以在视图模型中使用命令并将它们绑定到各自的属性。
<mr:BoxView Color="Green"
LongPressedCommand="{Binding LongPressedCommand}"
LongPressedCommandParameter="Green" />
命令的属性像事件一样被调用,只是Command附加了属性。您还可以使用*CommandParameter属性定义传递给命令的参数。如果您抑制CommandParameter,则相应的事件args将传递到您的命令。在这种情况下是一个MR.Gestures.LongPressEventArgs对象。
对于Tapped,DoubleTapped和LongPressed事件,你可能不需要事件参数和定义CommandParameter可能是有意义的。但是对于更复杂的事件,您将始终需要事件args,否则您将不知道发生了什么。例如,除非您也知道该方向,否则仅知道某个元素已被刷过是无济于事的。该Direction包含在SwipeEventArgs。
4、代码中的命令
您也可以在代码中绑定命令。
var box2 = new MR.Gestures.BoxView { Color = Color.Green };
box2.SetBinding(MR.Gestures.BoxView.LongPressedCommandProperty, "LongPressedCommand");
box2.LongPressedCommandParameter = "Green";
代码绑定的语法有点复杂,因此我最喜欢在XAML中使用命令。浏览GestureSample中的代码时,您还将看到这一点。尽管所有这些类别中都有示例,但是其中大多数都是用XAML编写的并绑定到命令。