处理单双按钮手势 click/tap

Handling Button gesture for both single and double click/tap

在 Xamarin Forms 中:我希望能够检测到 click/tap 和双重 click/tap,并能够执行不同的操作。

即点击按钮时我要执行actionA,双击按钮时我要执行actionB,而且只有actionB

你需要一个实际的按钮吗?否则看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;
}