Aggiungere un riconoscimento movimento tocco

Il gesto tocco viene usato per il rilevamento del tocco e viene implementato con la classe TapGestureRecognizer.

Per consentire il clic tramite il gesto tocco su un elemento dell'interfaccia utente, creare un'istanza di TapGestureRecognizer, gestire l'evento Tapped e aggiungere il nuovo sistema di riconoscimento del gesto tocco alla raccolta GestureRecognizers nell'elemento dell'interfaccia utente. L'esempio di codice seguente visualizza un TapGestureRecognizer associato a un elemento Image:

var tapGestureRecognizer = new TapGestureRecognizer();
tapGestureRecognizer.Tapped += (s, e) => {
    // handle the tap
};
image.GestureRecognizers.Add(tapGestureRecognizer);

Per impostazione predefinita, l'immagine risponde ai singoli tocchi. Impostare la proprietà NumberOfTapsRequired per attendere un doppio tocco (o più tocchi se richiesti).

tapGestureRecognizer.NumberOfTapsRequired = 2; // double-tap

Quando NumberOfTapsRequired è impostato su un valore maggiore di uno, il gestore dell'evento viene eseguito solo se i tocchi vengono effettuati entro un determinato periodo di tempo (il periodo di tempo non è configurabile). Se non vengono effettuati entro il periodo di tempo, il secondo tocco o i tocchi successivi vengono ignorati e il 'conteggio dei tocchi' viene azzerato.

Uso di Xaml

È possibile aggiungere un sistema di riconoscimento del gesto tocco a un controllo in Xaml usando le proprietà associate. La sintassi per aggiungere TapGestureRecognizer a un'immagine è indicata di seguito (in questo caso la definizione di un evento doppio tocco):

<Image Source="tapped.jpg">
    <Image.GestureRecognizers>
        <TapGestureRecognizer
                Tapped="OnTapGestureRecognizerTapped"
                NumberOfTapsRequired="2" />
  </Image.GestureRecognizers>
</Image>

Il codice per il gestore eventi (nell'esempio) incrementa un contatore e modifica l'immagine dal colore al bianco e nero.

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";
    }
}

Uso di ICommand

Le applicazioni che usano il criterio Model-View-ViewModel (MVVM) usano in genere ICommand anziché collegare direttamente i gestori degli eventi. TapGestureRecognizer può supportare ICommand impostando l'associazione nel codice:

var tapGestureRecognizer = new TapGestureRecognizer();
tapGestureRecognizer.SetBinding (TapGestureRecognizer.CommandProperty, "TapCommand");
image.GestureRecognizers.Add(tapGestureRecognizer);

o usando Xaml:

<Image Source="tapped.jpg">
    <Image.GestureRecognizers>
        <TapGestureRecognizer
            Command="{Binding TapCommand}"
            CommandParameter="Image1" />
    </Image.GestureRecognizers>
</Image>

Il codice completo per questo modello di visualizzazione è indicato nell'esempio. I dettagli dell'implementazione di Command pertinenti sono illustrati di seguito:

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
}