Sdílet prostřednictvím


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
}