Reconnaître un mouvement de pointeur
Un module de reconnaissance des mouvements de pointeur .NET Multi-Platform App UI (.NET MAUI) détecte quand le pointeur entre, quitte et se déplace dans une vue. Il est implémenté avec la classe PointerGestureRecognizer. Cette classe définit les propriétés suivantes :
- PointerEnteredCommand, de type ICommand, qui est la commande à appeler lorsque le pointeur pénètre dans la zone englobante de la vue.
- PointerEnteredCommandParameter, de type
object
, qui est le paramètre transmis à PointerEnteredCommand. - PointerExitedCommand, de type ICommand, qui est la commande à appeler lorsque le pointeur qui se trouve dans la zone englobante de la vue quitte cette zone englobante.
- PointerExitedCommandParameter, de type
object
, qui est le paramètre transmis à PointerExitedCommand. - PointerMovedCommand, de type ICommand, qui est la commande à appeler lorsque le pointeur se déplace dans les limites de la zone englobante de la vue.
- PointerMovedCommandParameter, de type
object
, qui est le paramètre transmis à PointerMovedCommand. - PointerPressedCommand, de type ICommand, qui est la commande à appeler lorsque le pointeur lance un appui dans la vue.
- PointerPressedCommandParameter, de type
object
: paramètre passé à la commande PointerPressedCommand. - PointerReleasedCommand, de type ICommand, qui est la commande à appeler lorsque le pointeur qui a lancé précédemment un appui est relâché tandis qu’il se trouve dans la vue.
- PointerReleasedCommandParameter, de type
object
: paramètre passé à la commande PointerReleasedCommand.
Les propriétés s’appuient sur des objets BindableProperty, ce qui signifie qu’elles peuvent être les cibles de liaisons de données et mises en forme avec un style.
La classe PointerGestureRecognizer définit également les événements suivants :
- PointerEntered, qui est déclenché lorsque le pointeur pénètre dans la zone englobante de la vue.
- PointerExited, qui est déclenché lorsque le pointeur qui se trouve dans la zone englobante de la vue quitte cette zone englobante.
- PointerMoved, qui est déclenché lorsque le pointeur se déplace dans les limites de la zone englobante de la vue.
- PointerPressed, qui est déclenché lorsque le pointeur lance un appui dans la vue.
- PointerReleased, qui est déclenché lorsque le pointeur qui a lancé précédemment un appui est relâché tandis qu’il se trouve dans la vue.
Un objet PointerEventArgs accompagne les événements, et définit une propriété PlatformArgs de type PlatformPointerEventArgs qui fournit l’accès à des arguments propres à la plateforme pour l’événement.
Sur Android, la classe PlatformPointerEventArgs définit les propriétés suivantes :
Sender
, de type View, représente la vue native attachée à l’événement.MotionEvent
, de type MotionEvent, indique le gestionnaire ou événement natif attaché à la vue.
En outre, l’objet PointerEventArgs définit une méthode GetPosition qui retourne un objet Point?
qui représente la position du pointeur au moment où le mouvement a été détecté. Pour plus d’informations sur la méthode GetPosition, consultez Obtenir la position du mouvement.
Important
La reconnaissance des mouvements du pointeur est prise en charge sur Android, iPadOS, Mac Catalyst et Windows.
.NET MAUI définit également un état visuel PointerOver
. Cet état peut modifier l’aspect visuel d’une vue lorsqu’un curseur de souris lui passe dessus, mais sans appui. Pour plus d'informations, consultez États visuels.
Créer un PointerGestureRecognizer
Pour faire en sorte qu’un View reconnaisse les mouvements de pointeur, créez un objet PointerGestureRecognizer, gérez les événements requis, et ajoutez le module de reconnaissance de mouvement à la collection GestureRecognizers sur la vue. Vous pouvez également créer un objet PointerGestureRecognizer et lier les commandes requises à des implémentations ICommand, puis ajouter le module de reconnaissance de mouvement à la collection GestureRecognizers sur la vue.
L’exemple de code suivant montre un PointerGestureRecognizer attaché à un Image. PointerGestureRecognizer utilise des événements pour répondre à la détection des mouvements de pointeur :
<Image Source="dotnet_bot.png">
<Image.GestureRecognizers>
<PointerGestureRecognizer PointerEntered="OnPointerEntered"
PointerExited="OnPointerExited"
PointerMoved="OnPointerMoved" />
</Image.GestureRecognizers>
</Image>
Le code des gestionnaires d’événements doit être ajouté au fichier code-behind :
void OnPointerEntered(object sender, PointerEventArgs e)
{
// Handle the pointer entered event
}
void OnPointerExited(object sender, PointerEventArgs e)
{
// Handle the pointer exited event
}
void OnPointerMoved(object sender, PointerEventArgs e)
{
// Handle the pointer moved event
}
Le code C# équivalent est :
PointerGestureRecognizer pointerGestureRecognizer = new PointerGestureRecognizer();
pointerGestureRecognizer.PointerEntered += (s, e) =>
{
// Handle the pointer entered event
};
pointerGestureRecognizer.PointerExited += (s, e) =>
{
// Handle the pointer exited event
};
pointerGestureRecognizer.PointerMoved += (s, e) =>
{
// Handle the pointer moved event
};
Image image = new Image();
image.GestureRecognizers.Add(pointerGestureRecognizer);
Obtenir la position du mouvement
La position à laquelle un mouvement de pointeur s’est produit peut être obtenue en appelant la méthode GetPosition sur un objet PointerEventArgs. La méthode GetPosition accepte un argument Element?
et retourne une position sous forme d’objet Point?
:
void OnPointerExited(object sender, PointerEventArgs 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 par rapport auquel la position doit être obtenue. Fournir une valeur null
pour cet argument signifie que la méthode GetPosition retourne un objet Point?
qui définit la position du mouvement de pointeur à l’intérieur de la fenêtre.