处理单双按钮手势 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;
}
在 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;
}