gpt4 book ai didi

c# - 扩展 Label 控件 - 添加 Click 事件处理程序

转载 作者:太空宇宙 更新时间:2023-11-03 23:01:10 26 4
gpt4 key购买 nike

我需要一个可以响应单击/点击和双击/点击的控件。我发现如果我想处理单击和双击/点击,我不能使用 TapGestureRecognizer。因此,我试图扩展一个 Label 控件,添加一个 Click 事件处理程序。我尝试了以下代码,但事件没有触发。有什么建议么?谢谢!

in LabelClickable.cs:
...
public class LabelClickable : Label
{
public event EventHandler Clicked;
public virtual void OnClicked()
{
Clicked?.Invoke(this, EventArgs.Empty);
}
}
...<br/>
in MainPage.XAML:
...
<local:LabelClickable Text="0" Clicked="Button_Clicked"/>
...<br/>
and in MainPage.Xaml.cs:
...
private void Button_Clicked(object sender, EventArgs e)
{
//do something;
}
...

最佳答案

这是完整的工作解决方案(感谢 Jason 的建议!):

public class LabelClickable: Label
{
public LabelClickable()
{
TapGestureRecognizer singleTap = new TapGestureRecognizer()
{
NumberOfTapsRequired = 1
};
TapGestureRecognizer doubleTap = new TapGestureRecognizer()
{
NumberOfTapsRequired = 2
};
this.GestureRecognizers.Add(singleTap);
this.GestureRecognizers.Add(doubleTap);
singleTap.Tapped += Label_Clicked;
doubleTap.Tapped += Label_Clicked;
}

private static int clickCount;

private void Label_Clicked(object sender, EventArgs e)
{
if (clickCount < 1)
{
TimeSpan tt = new TimeSpan(0, 0, 0, 0, 250);
Device.StartTimer(tt, ClickHandle);
}
clickCount++;
}

bool ClickHandle()
{
if (clickCount > 1)
{
Minus1();
}
else
{
Plus1();
}
clickCount = 0;
return false;
}

private void Minus1()
{
int value = Convert.ToInt16(Text) - 1;
if (value < 0)
value = 0;
Text = value.ToString();
}

private void Plus1()
{
Text = (Convert.ToInt16(Text) + 1).ToString();
}
}

在 MainPage.xaml 上的用法:

<local:LabelClickable Text="0" Grid.Row="0" Grid.Column="0" BackgroundColor="Transparent" FontSize="Large" FontAttributes="Bold" HorizontalTextAlignment="Center"/>

MainPage.xaml.cs 不需要任何其他内容。

对于单击和双击都非常有效!结果是一个显示计数器的可点击标签;计数器在单击时递增,在双击时递减。

关于c# - 扩展 Label 控件 - 添加 Click 事件处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43030760/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com