在 Xamarin 窗体中:我希望能够同时检测单击/点击和双击/点击,并能够执行不同的操作。
也就是说,当按钮被点击时,我想执行actionA
,当按钮被双击时,我想执行actionB
,并且只能执行actionB
。
你需要一个实际的按钮吗?否则看看TapGestureRecognizer
.在这篇文章中描述了如何使用它。您几乎可以将其应用于任何控件。
例如,如果将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}" />
方法(在视图模型中.cs(:
public void MyMethod()
{
IsClicked = false;
// Your code
IsClicked = true;
}