Přidání rozpoznávání gest klepnutím
Gesto klepnutí se používá k detekci klepnutí a je implementováno s TapGestureRecognizer třída.
Pokud chcete, aby byl prvek uživatelského rozhraní klikaný na gesto klepnutí, vytvořte TapGestureRecognizer
instanci, zpracujte Tapped
událost a přidejte do kolekce prvek uživatelského rozhraní nový rozpoznávání GestureRecognizers
gest. Následující příklad kódu ukazuje připojenou TapGestureRecognizer
k elementu Image
:
var tapGestureRecognizer = new TapGestureRecognizer();
tapGestureRecognizer.Tapped += (s, e) => {
// handle the tap
};
image.GestureRecognizers.Add(tapGestureRecognizer);
Ve výchozím nastavení bude obrázek reagovat na jedno klepnutí. Nastavte vlastnost tak NumberOfTapsRequired
, aby počkala na poklepáním (nebo více klepnutím v případě potřeby).
tapGestureRecognizer.NumberOfTapsRequired = 2; // double-tap
Pokud NumberOfTapsRequired
je nastavena výše jedna, obslužná rutina události se spustí pouze v případě, že klepnutí proběhnou v nastaveném časovém období (toto období není konfigurovatelné). Pokud se během daného období nenasadí druhé (nebo následné) klepnutí, budou v podstatě ignorovány a počet klepnutí se restartuje.
Použití Xaml
Rozpoznávání gest lze přidat do ovládacího prvku v xaml pomocí připojených vlastností. Syntaxe pro přidání TapGestureRecognizer
obrázku je znázorněna níže (v tomto případě definujete událost poklepáním ):
<Image Source="tapped.jpg">
<Image.GestureRecognizers>
<TapGestureRecognizer
Tapped="OnTapGestureRecognizerTapped"
NumberOfTapsRequired="2" />
</Image.GestureRecognizers>
</Image>
Kód obslužné rutiny události (v ukázce) zvýší čítač a změní obrázek z barvy na černou a bílou.
void OnTapGestureRecognizerTapped(object sender, EventArgs args)
{
tapCount++;
var imageSender = (Image)sender;
// watch the monkey go from color to black&white!
if (tapCount % 2 == 0) {
imageSender.Source = "tapped.jpg";
} else {
imageSender.Source = "tapped_bw.jpg";
}
}
Použití příkazů ICommand
Aplikace, které používají model Model-View-ViewModel (MVVM), obvykle používají ICommand
místo přímé zapojení obslužných rutin událostí. Můžete TapGestureRecognizer
ji snadno podporovat ICommand
nastavením vazby v kódu:
var tapGestureRecognizer = new TapGestureRecognizer();
tapGestureRecognizer.SetBinding (TapGestureRecognizer.CommandProperty, "TapCommand");
image.GestureRecognizers.Add(tapGestureRecognizer);
nebo pomocí xaml:
<Image Source="tapped.jpg">
<Image.GestureRecognizers>
<TapGestureRecognizer
Command="{Binding TapCommand}"
CommandParameter="Image1" />
</Image.GestureRecognizers>
</Image>
Kompletní kód pro tento model zobrazení najdete v ukázce. Command
Relevantní podrobnosti implementace jsou uvedené níže:
public class TapViewModel : INotifyPropertyChanged
{
int taps = 0;
ICommand tapCommand;
public TapViewModel () {
// configure the TapCommand with a method
tapCommand = new Command (OnTapped);
}
public ICommand TapCommand {
get { return tapCommand; }
}
void OnTapped (object s) {
taps++;
Debug.WriteLine ("parameter: " + s);
}
//region INotifyPropertyChanged code omitted
}