【发布时间】:2017-08-12 05:20:30
【问题描述】:
在 Xamarin 表单中:我希望能够同时检测单击/点击和双击/点击,并能够执行不同的操作。
也就是说,当按钮被点击时我要执行actionA,而当按钮被双击时我要执行actionB,并且只有actionB。
【问题讨论】:
标签: event-handling xamarin.forms double-click
在 Xamarin 表单中:我希望能够同时检测单击/点击和双击/点击,并能够执行不同的操作。
也就是说,当按钮被点击时我要执行actionA,而当按钮被双击时我要执行actionB,并且只有actionB。
【问题讨论】:
标签: event-handling xamarin.forms double-click
你需要一个实际的按钮吗?否则请查看TapGestureRecognizer。在this post 中描述了如何使用它。您几乎可以将其应用于任何控件。
例如,如果您将Label 设置为看起来像一个按钮,您将在其上添加一个双击识别器,如下所示:
<Label Text="Tap me, I double dare you">
<Label.GestureRecognizers>
<TapGestureRecognizer
Tapped="OnTapGestureRecognizerTapped"
NumberOfTapsRequired="2" />
</Label.GestureRecognizers>
</Label>
当然,您需要在您的代码中包含一个名为OnTapGestureRecognizerTapped 的事件。但由于NumberOfTapsRequired 属性中的值,您需要双击才能激活它。
如果您更喜欢代码,这将是对应的:
var tapGestureRecognizer = new TapGestureRecognizer();
tapGestureRecognizer.NumberOfTapsRequired = 2;
tapGestureRecognizer.Tapped += (s, e) => {
// handle the tap
};
label.GestureRecognizers.Add(tapGestureRecognizer);
【讨论】:
这是我最终做的事情(感谢 Amit Patil):
private static int clickCount;
private static object _sender;
private void Button_Clicked(object sender, EventArgs e)
{
if (clickCount < 1)
{
TimeSpan tt = new TimeSpan(0, 0, 0, 0, 250);
_sender = sender;
Device.StartTimer(tt, ClickHandle);
}
clickCount++;
}
bool ClickHandle()
{
if (clickCount > 1)
{
Minus1(_sender);
}
else
{
Plus1(_sender);
}
clickCount = 0;
_sender = null;
return false;
}
【讨论】:
ViewModel.cs:
private bool _isClicked = true;
public bool IsClicked
{
get { return _isClicked = true; }
set { _isClicked = true = value; OnPropertyChanged(); }
}
View.xaml:
<Button Text="Click!" IsEnabled="{Binding IsClicked}" />
方法(在 ViewModel.cs 中):
public void MyMethod()
{
IsClicked = false;
// Your code
IsClicked = true;
}
【讨论】: