Handling Button gesture for both single and double

2019-06-02 20:48发布

In Xamarin Forms: I want to be able to detect both click/tap and double-click/tap, and to be able to perform different actions.

That is, when the button is clicked I want to perform actionA, and when the button is double-clicked I want to perform actionB, and only actionB.

2条回答
The star\"
2楼-- · 2019-06-02 21:32

Here's what I ended up doing (kudos to 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;
    }
查看更多
虎瘦雄心在
3楼-- · 2019-06-02 21:40

Do you need an actual button? Else look at the TapGestureRecognizer. In this post is described how you can use it. You can apply it to virtually any control.

For example if you would style a Label to look like a button, you would add a double tap recognizer on it like this:

<Label Text="Tap me, I double dare you">
    <Label.GestureRecognizers>
        <TapGestureRecognizer
                Tapped="OnTapGestureRecognizerTapped"
                NumberOfTapsRequired="2" />
  </Label.GestureRecognizers>
</Label>

Of course you need to have an event called OnTapGestureRecognizerTapped in your code behind. But because of the value in the NumberOfTapsRequired property, you will need a double tap to activate it.

If you prefer code, this would be the counterpart:

var tapGestureRecognizer = new TapGestureRecognizer();
tapGestureRecognizer.NumberOfTapsRequired = 2;
tapGestureRecognizer.Tapped += (s, e) => {
    // handle the tap
};
label.GestureRecognizers.Add(tapGestureRecognizer);
查看更多
登录 后发表回答