你能让我知道如何在Xamarin Forms应用程序中识别长按手势吗?
在我使用TapGestureRecognizer
的前几天
TapGestureRecognizer imageTap = new TapGestureRecognizer();
imageTap.Tapped += (sender, args) => this.OnClickImage;
image.GestureRecognizers.Add(imageTap);
但是我不知道如何根据这个thread from xamarin forum做出长按手势
它应该看起来像这样,但它不工作。
var dumpParam = new RelayGesture((g, x) => DisplayAlert("Title", "Hello message", "Cancel"));
book.Cover.SetValue(Gestures.InterestsProperty, new GestureCollection() {
new GestureInterest
{
GestureType = GestureType.LongPress
GestureCommand = // what should I set?
GestureParameter = dumpParam
}
});
如何设置我的自定义处理程序方法?
7条答案
按热度按时间vptzau2j1#
只要是
Xamarin.Forms.Button
或其子类型,您就可以通过附加以下行为来跨平台执行此操作。在XAML用户界面中:
具有命令绑定的XAML UI:
t9aqgxwy2#
利用XLabs.Forms nuget包,它只在PCL代码中进行长按和其他手势。使用XLabs.Forms包将减少在个别平台中自定义渲染的需要...在.xaml文件中添加XAML代码,并在. xaml.cs文件中添加附加的事件处理程序..它在Android中工作得很好..
C#后端程式码:
50few1ms3#
我最近遇到了这个问题,并找到了一个关于https://alexdunn.org/2017/12/27/xamarin-tip-xamarin-forms-long-press-effect/主题的有用帖子
它使用了
RoutingEffect
,并通过一个示例演示了如何创建iOS和Android实现。它的简单性允许您将其附加到应用中的任何视图,而无需重新创建代码。raogr8fs4#
在网上冲浪,我找到了解决方案。有几个步骤,你应该重现。
**1)**继承您需要手势的控件(例如,如果您要将手势加入
Xamarin.Forms.Image
,请建立您自己的ImageWithLongPressGesture
类别)。2)公开所需手势的公共事件。
3)为每个平台创建渲染器。
4)在渲染器中,处理手势并将其冒泡到您的控件中。
该解决方案是Telerik的answer on xamarin forms forum和Touch and Gestures presentation的混合。
vptzau2j5#
hmtdttj46#
为了让它在iOS上正常工作,需要使用XLabs.Forms.XFormsAppiOS.Init();在LoadApplication(new App())之前的AppDelegate.cs文件中;陈述式。
ztmd8pv57#
如果您注册BindingContextChanged事件,则@zafar发布的代码可以工作。(我的帖子只是对@zafar原始帖子的补充。)
**问题是:**如果使用
CommandParameter="{Binding .}"
,结果参数始终为空。您需要在OnAttachedTo函数中注册BindingContextChanged事件。
对于错误,这是我的第一篇文章(没有足够的声誉评论)。