ここでは、完全な作業溶液(提案ジェイソンに感謝!)です:MainPage.xamlを上
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();
}
}
使用法:
<local:LabelClickable Text="0" Grid.Row="0" Grid.Column="0" BackgroundColor="Transparent" FontSize="Large" FontAttributes="Bold" HorizontalTextAlignment="Center"/>
他に何もする必要はありませんMainPage.xaml.csにあります。
シングルタップとダブルタップの両方の魅力のように機能します!結果は、カウンタを表示するクリック可能なラベルです。カウンタはシングルタップでインクリメントし、ダブルタップでデクリメントします。
代わりにTGRタップイベントハンドラではありませんか?また、私はXAMLよりもコード内にTGRを追加して成功しました。 –
申し訳ありませんが、私はTGRが何を意味するのか分かりません。また、私が拡張しようとしているForms.Labelコントロールには、 'Clicked'イベントがありません。私がそれを追加することに成功すると、それは拡張されたコントロールだけで新しいイベントになるので、そのイベントの名前が何であるかは関係ありません。私はまた、イベントハンドラをコードなしで成功させずにフックしようとしました。 – Moto
これをすべて追加するには、拡張コントロールが作成されていることがわかります(コンストラクターにブレークポイントを入れました)。メインページでFindByNameを使って拡張コントロールを取得できます。すべてが問題なく、コードがコンパイルされて実行されますが、イベントが発生しないことだけです。 – Moto