Partager via


Reconnaître un mouvement d’appui

Un module de reconnaissance de mouvement d’application multiplateforme .NET (.NET MAUI) est utilisé pour la détection du tap et est implémenté avec la TapGestureRecognizer classe. Cette classe définit les propriétés suivantes :

  • Buttons, de type ButtonsMask, qui définit si le bouton de la souris primaire ou secondaire, ou les deux, déclenche le mouvement sur Android, Mac Catalyst et Windows. Pour plus d’informations, consultez Définir les masques de bouton.
  • Command, de type ICommand, qui est exécuté lorsqu’un appui est reconnu.
  • CommandParameter, de type object : paramètre passé à la commande Command.
  • NumberOfTapsRequired, de type int, qui représente le nombre d’appuis requis pour reconnaître un mouvement d’appui. La valeur par défaut de cette propriété est 1.

Ces propriétés sont sauvegardées par BindableProperty des objets, ce qui signifie qu’elles peuvent être des cibles de liaisons de données et mises en forme.

La TapGestureRecognizer classe définit également un Tapped événement déclenché lorsqu’un appui est reconnu. L’objet TappedEventArgs qui accompagne l’événement Tapped définit une Parameter propriété de type object qui indique la valeur passée par la CommandParameter propriété, si elle est définie. L’objet TappedEventArgs définit également une Buttons propriété et une GetPosition méthode. La Buttons propriété est de type ButtonsMasket peut être utilisée pour déterminer si le bouton de la souris primaire ou secondaire a déclenché le module de reconnaissance de mouvement sur Android, Mac Catalyst et Windows. La GetPosition méthode retourne un Point? objet qui représente la position à laquelle le mouvement d’appui a été détecté. Pour plus d’informations sur les masques de bouton, consultez Définir le masque de bouton. Pour plus d’informations sur la GetPosition méthode, consultez Obtenir la position du mouvement.

Avertissement

Vous TapGestureRecognizer ne pouvez pas reconnaître plus d’un appui double sur Windows.

Créer un TapGestureRecognizer

Pour reconnaître un View mouvement d’appui, créez un TapGestureRecognizer objet, gérez l’événement Tapped et ajoutez le nouveau module de reconnaissance de mouvement à la GestureRecognizers collection sur la vue. L’exemple de code suivant montre un TapGestureRecognizer élément attaché à un Image:

<Image Source="dotnet_bot.png">
    <Image.GestureRecognizers>
        <TapGestureRecognizer Tapped="OnTapGestureRecognizerTapped"
                              NumberOfTapsRequired="2" />
  </Image.GestureRecognizers>
</Image>

Le code du gestionnaire d’événements OnTapGestureRecognizerTapped doit être ajouté au fichier code-behind :

void OnTapGestureRecognizerTapped(object sender, TappedEventArgs args)
{
    // Handle the tap
}

Le code C# équivalent est :

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

Par défaut, la Image réponse aux appuis simples est effectuée. Lorsque la NumberOfTapsRequired propriété est définie sur une valeur supérieure à une, le gestionnaire d’événements est exécuté uniquement si les appuis se produisent pendant une période définie. Si les deuxièmes appuis (ou ultérieurs) ne se produisent pas pendant cette période, ils sont effectivement ignorés.

Définir le masque de bouton

Un TapGestureRecognizer objet a une Buttons propriété, de type ButtonsMask, qui définit si le bouton de la souris primaire ou secondaire, ou les deux, déclenche le mouvement sur Android, Mac Catalyst et Windows. L’énumération ButtonsMask définit les membres suivants :

  • Primary représente le bouton principal de la souris, qui est généralement le bouton gauche de la souris.
  • Secondary représente le bouton de la souris secondaire, qui est généralement le bouton droit de la souris.

L’exemple suivant montre une TapGestureRecognizer touche qui détecte les appuis avec le bouton de la souris secondaire :

<Image Source="dotnet_bot.png">
    <Image.GestureRecognizers>
        <TapGestureRecognizer Tapped="OnTapGestureRecognizerTapped"
                              Buttons="Secondary" />
  </Image.GestureRecognizers>
</Image>

Le gestionnaire d’événements de l’événement Tapped peut déterminer le bouton qui a déclenché le mouvement :

void OnTapGestureRecognizerTapped(object sender, TappedEventArgs args)
{
    // Handle the tap
    if (args.Buttons == ButtonsMask.Secondary)
    {
        // Do something
    }
}

Le code C# équivalent est :

TapGestureRecognizer tapGestureRecognizer = new TapGestureRecognizer
{
    Buttons = ButtonsMask.Secondary
};
tapGestureRecognizer.Tapped += (s, e) =>
{
    // Handle the tap
    if (args.Buttons == ButtonsMask.Secondary)
    {
        // Do something
    }
};
Image image = new Image();
image.GestureRecognizers.Add(tapGestureRecognizer);

Avertissement

Sur Windows, une TapGestureRecognizer propriété qui définit la Buttons propriété Secondary sur laquelle elle ne respecte pas la NumberOfTapsRequired propriété lorsqu’elle est supérieure à une.

En outre, un TapGestureRecognizer peut être défini afin que le bouton de la souris primaire ou secondaire déclenche le mouvement :

<TapGestureRecognizer Tapped="OnTapGestureRecognizerTapped"
                      Buttons="Primary,Secondary" />

Le code C# équivalent est :

TapGestureRecognizer tapGestureRecognizer = new TapGestureRecognizer
{
    Buttons = ButtonsMask.Primary | ButtonsMask.Secondary
};

Obtenir la position du mouvement

La position à laquelle un mouvement d’appui s’est produit peut être obtenue en appelant la GetPosition méthode sur un TappedEventArgs objet. La GetPosition méthode accepte un Element? argument et retourne une position en tant qu’objet Point? :

void OnTapGestureRecognizerTapped(object sender, TappedEventArgs e)
{
    // Position inside window
    Point? windowPosition = e.GetPosition(null);

    // Position relative to an Image
    Point? relativeToImagePosition = e.GetPosition(image);

    // Position relative to the container view
    Point? relativeToContainerPosition = e.GetPosition((View)sender);
}

L’argument Element? définit l’élément auquel la position doit être obtenue par rapport. Fournir une null valeur comme cet argument signifie que la GetPosition méthode retourne un Point? objet qui définit la position du mouvement d’appui à l’intérieur de la fenêtre.