Freigeben über


Erkennen einer Tippgeste

Eine .NET Multi-Platform App UI (.NET MAUI) Tippgesten-Erkennung wird zur Tipp-Erkennung verwendet und mit der TapGestureRecognizer Klasse implementiert. Diese Klasse definiert die folgenden Eigenschaften:

  • Buttons, vom Typ ButtonsMask, der definiert, ob die primäre oder sekundäre Maustaste oder beides die Geste unter Android, Mac Catalyst und Windows auslöst. Weitere Informationen finden Sie unter Definieren der Schaltflächenformate.
  • Command vom Typ ICommand, der ausgeführt wird, sobald eine Ziehgeste erkannt wird.
  • CommandParameter, vom Typ object: Parameter, der an den Command übergeben wird.
  • NumberOfTapsRequired, vom Typ int, der die Anzahl der Tippeingaben darstellt, die zum Erkennen einer Tippbewegung erforderlich sind. Der Standardwert dieser Eigenschaft ist 1.

Diese Eigenschaften werden durch BindableProperty-Objekte gestützt, was bedeutet, dass sie Ziele von Datenbindungen sein können, und geformt.

Die TapGestureRecognizer Klasse definiert auch ein Tapped Ereignis, das ausgelöst wird, wenn ein Tippen erkannt wird. Das TappedEventArgs Objekt, das das Tapped Ereignis begleitet, definiert eine Parameter Eigenschaft vom Typ object , die den von der CommandParameter Eigenschaft übergebenen Wert angibt, falls definiert. Das TappedEventArgs Objekt definiert auch eine Buttons Eigenschaft und eine GetPosition Methode. Die Buttons Eigenschaft ist vom Typ ButtonsMaskund kann verwendet werden, um zu bestimmen, ob die primäre oder sekundäre Maustaste die Gestikerkennung unter Android, Mac Catalyst und Windows ausgelöst hat. Die GetPosition Methode gibt ein Point? Objekt zurück, das die Position darstellt, an der die Tippbewegung erkannt wurde. Weitere Informationen zu Schaltflächenformaten finden Sie unter Definieren des Schaltflächenformats. Weitere Informationen zur GetPosition Methode finden Sie unter "Abrufen der Gestenposition.

Warnung

Die TapGestureRecognizer kann nicht mehr erkennen, als ein Doppeltippen unter Windows.

Erstellen eines TapGestureRecognizers

Um eine View Tippbewegung zu erkennen, erstellen Sie ein TapGestureRecognizer Objekt, behandeln das Tapped Ereignis, und fügen Sie die neue Gestikerkennung der Auflistung in der GestureRecognizers Ansicht hinzu. Das folgende Codebeispiel zeigt eine TapGestureRecognizer Klasse, die an eine Image Klasse angefügt ist:

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

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

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

Der entsprechende C#-Code lautet:

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

Standardmäßig reagiert Image auf einzelne Tippbewegungen. Wenn NumberOfTapsRequired auf größer als 1 festgelegt ist, wird der Ereignishandler nur ausgeführt, wenn innerhalb eines festgelegten Zeitraums Tippbewegungen vorgenommen werden. Dieser Zeitraum ist nicht konfigurierbar. Sollte die zweite Tippbewegung (oder weitere) nicht in diesem Zeitraum erfolgen, werden sie effektiv ignoriert.

Definieren des Schaltflächenformats

Ein TapGestureRecognizer Objekt verfügt über eine Buttons Eigenschaft vom Typ ButtonsMask, die definiert, ob die primäre oder sekundäre Maustaste oder beides die Geste unter Android, Mac Catalyst und Windows auslöst. Die ButtonsMask-Enumeration definiert die folgenden Member:

  • Primary stellt die primäre Maustaste dar, bei der es sich in der Regel um die linke Maustaste handelt.
  • Secondary stellt die sekundäre Maustaste dar, bei der es sich in der Regel um die rechte Maustaste handelt.

Im folgenden Beispiel wird ein TapGestureRecognizer Tippfehler mit der sekundären Maustaste erkannt:

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

Der Ereignishandler für das Tapped Ereignis kann bestimmen, welche Schaltfläche die Geste ausgelöst hat:

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

Der entsprechende C#-Code lautet:

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

Warnung

Unter Windows respektiert eine TapGestureRecognizer, welche die Buttons Eigenschaft auf Secondary setzt, nicht die NumberOfTapsRequired Eigenschaft, wenn diese größer als eins ist.

Darüber hinaus kann eine TapGestureRecognizer definiert werden, sodass entweder die primäre oder sekundäre Maustaste die Geste auslöst:

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

Der entsprechende C#-Code lautet:

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

Abrufen der Gestikposition

Die Position, an der eine Tippbewegung aufgetreten ist, kann durch Aufrufen der GetPosition Methode für ein TappedEventArgs Objekt abgerufen werden. Die GetPosition Methode akzeptiert ein Element? Argument und gibt eine Position als Point? Objekt zurück:

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

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 Tap-Geste innerhalb des Fensters definiert.