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:
- PointerEnteredCommand, vom Typ ICommand, der aufgerufen werden soll, wenn der Zeiger in den Begrenzungsbereich der Ansicht wechselt.
- PointerEnteredCommandParameter vom Typ
object
, der der Parameter ist, der an PointerEnteredCommand übergeben wird. - PointerExitedCommand, vom Typ ICommand, der aufgerufen werden soll, wenn der Zeiger, der sich im Begrenzungsbereich der Ansicht befindet, diesen Begrenzungsbereich verlässt.
- PointerExitedCommandParameter vom Typ
object
, der der Parameter ist, der an PointerExitedCommand übergeben wird. - PointerMovedCommand, vom Typ ICommand, das ist der Befehl, der aufgerufen wird, wenn sich der Zeiger bewegt und dabei innerhalb des Begrenzungsbereichs der Ansicht bleibt.
- PointerMovedCommandParameter, vom Typ
object
, der der Parameter ist, der an PointerMovedCommand übergeben wird. - PointerPressedCommand vom Typ ICommand, d. h. der Befehl, der aufgerufen wird, wenn der Zeiger einen Druck innerhalb der Ansicht auslöst.
- PointerPressedCommandParameter, vom Typ
object
: Parameter, der an den PointerPressedCommand übergeben wird. - PointerReleasedCommand vom Typ ICommand, d.h. der Befehl, der aufgerufen wird, wenn der Zeiger, der zuvor einen Druckvorgang ausgelöst hat, innerhalb der Ansicht losgelassen wird.
- PointerReleasedCommandParameter, vom Typ
object
: Parameter, der an den PointerReleasedCommand übergeben wird.
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.