Freigeben über


Erkennen einer Zeigergeste

Eine .NET Multi-platform App UI(.NET MAUI)-Zeigergestenerkennung erkennt, wenn der Zeiger in eine Ansicht eintritt, sie verlässt und sich innerhalb der Ansicht bewegt, und wird mit der Klasse PointerGestureRecognizer implementiert. Diese Klasse definiert die folgenden Eigenschaften:

Diese Eigenschaften werden von BindableProperty-Objekten unterstützt, was bedeutet, dass sie Ziele von Datenbindungen sein können und formatiert werden können.

Die Klasse PointerGestureRecognizer definiert auch die folgenden Ereignisse:

  • PointerEntered, die ausgelöst wird, wenn der Zeiger in den Begrenzungsbereich der Ansicht eintritt.
  • PointerExited, die ausgelöst wird, wenn der Zeiger, der sich im Begrenzungsbereich der Ansicht befindet, diesen Begrenzungsbereich verlässt.
  • PointerMoved, die ausgelöst wird, wenn sich der Zeiger bewegt und dabei innerhalb des Begrenzungsbereichs der Ansicht bleibt.
  • PointerPressed, die ausgelöst wird, wenn der Zeiger einen Druck innerhalb der Ansicht auslöst.
  • PointerReleased, die ausgelöst wird, wenn der Zeiger, der zuvor einen Druck ausgelöst hat, innerhalb der Ansicht losgelassen wird.

Ein PointerEventArgs-Objekt begleitet die Ereignisse und definiert eine PlatformArgs-Eigenschaft vom Typ PlatformPointerEventArgs, die Zugang zu plattformspezifischen Argumenten für das Ereignis bietet.

Die PlatformPointerEventArgs-Klasse definiert die folgenden Eigenschaften:

  • Sender, vom Typ View, stellt die systemeigene Ansicht, die an das Ereignis angefügt ist.
  • MotionEvent, vom Typ MotionEvent, gibt das systemeigene Ereignis oder Handler an, das an die Ansicht angefügt ist.

Darüber hinaus definiert das PointerEventArgs-Objekt eine GetPosition-Methode, die ein Point?-Objekt zurückgibt, das die Position des Zeigers darstellt, wenn die Geste erkannt wurde. Weitere Informationen über die GetPosition-Methode finden Sie unter Abfrage der Gestenposition.

Wichtig

Die Zeigergestenerkennung wird unter Android, iPadOS, Mac Catalyst und Windows unterstützt.

NET MAUI definiert auch einen visuellen Status PointerOver. Dieser Zustand kann die visuelle Darstellung einer Ansicht ändern, wenn ein Mauszeiger darauf zeigt, aber nicht gedrückt wird. Weitere Informationen finden Sie unter Visual Studio SDK.

Erstellen eines PointerGestureRecognizers

Damit ein View Zeigergesten erkennt, erstellen Sie ein PointerGestureRecognizer Objekt, behandeln die erforderlichen Ereignisse und fügen die Gestenerkennung zur GestureRecognizers Sammlung der Ansicht hinzu. Alternativ können Sie ein PointerGestureRecognizer-Objekt erstellen, die erforderlichen Befehle an ICommand-Implementierungen binden und die Gestenerkennung zur GestureRecognizers-Sammlung in der Ansicht hinzufügen.

Das folgende Codebeispiel zeigt eine PointerGestureRecognizer-Klasse, die an eine Image-Klasse angefügt ist: Der PointerGestureRecognizer verwendet Ereignisse, um auf die Erkennung von Zeigergesten zu reagieren:

<Image Source="dotnet_bot.png">
    <Image.GestureRecognizers>
        <PointerGestureRecognizer PointerEntered="OnPointerEntered"
                                  PointerExited="OnPointerExited"
                                  PointerMoved="OnPointerMoved" />
  </Image.GestureRecognizers>
</Image>

Der Code für den Ereignishandler wird dann zur CodeBehind-Datei hinzugefügt:

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
}

Der entsprechende C#-Code lautet:

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);

Abrufen der Gestikposition

Die Position, an der eine Zeigergeste aufgetreten ist, kann durch den Aufruf der GetPosition-Methode für ein PointerEventArgs-Objekt ermittelt werden. Die GetPosition-Methode nimmt ein Element?-Argument entgegen und gibt eine Position als Point?-Objekt zurück:

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

Das Element?-Argument definiert das Element, zu dem die Position relativ abgerufen werden soll. Die Angabe eines null-Wertes als Argument bedeutet, dass die GetPosition-Methode ein Point?-Objekt zurückgibt, das die Position der Zeigergeste innerhalb des Fensters definiert.