Sdílet prostřednictvím


Rozpoznávání gesta klepnutím

Rozpoznávání gest klepnutím na rozhraní .NET Pro víceplatformní aplikace (.NET MAUI) se používá k detekci klepnutí a implementuje se s TapGestureRecognizer třídou. Tato třída definuje následující vlastnosti:

  • Buttons, typu ButtonsMask, který definuje, zda primární nebo sekundární tlačítko myši, nebo obojí, aktivuje gesto v Androidu, Mac Catalyst a Windows. Další informace najdete v tématu Definování masek tlačítek.
  • Command, typu ICommand, který se spustí při rozpoznání klepnutí.
  • CommandParameter, typu object, což je parametr, který je předán do Command.
  • NumberOfTapsRequired, typu int, který představuje počet klepnutí potřebných k rozpoznávání gesta klepnutím. Výchozí hodnota této vlastnosti je 1.

Tyto vlastnosti jsou podporovány BindableProperty objekty, což znamená, že mohou být cíle datových vazeb a stylovány.

Třída TapGestureRecognizer také definuje Tapped událost, která je vyvolána při rozpoznání klepnutí. Objekt TappedEventArgs , který doprovází Tapped událost definuje Parameter vlastnost typu object , která označuje hodnotu předanou CommandParameter vlastností, pokud je definována. Objekt TappedEventArgs také definuje Buttons vlastnost a metodu GetPosition . Vlastnost Buttons je typu ButtonsMaska lze ji použít k určení, zda primární nebo sekundární tlačítko myši aktivovalo rozpoznávání gest v Androidu, Mac Catalyst a Windows. Metoda GetPosition vrátí Point? objekt, který představuje pozici, ve které bylo zjištěno gesto klepnutí. Další informace o maskách tlačítek najdete v tématu Definování masky tlačítka. Další informace o GetPosition metodě naleznete v tématu Získání pozice gesta.

Upozorňující

Nejde TapGestureRecognizer rozpoznat víc než poklepáním na Windows.

Vytvoření tapGestureRecognizer

Pokud chcete rozpoznat View gesto klepnutím, vytvořte TapGestureRecognizer objekt, zpracujte Tapped událost a přidejte do kolekce v zobrazení nový rozpoznávání GestureRecognizers gest. Následující příklad kódu ukazuje připojenou TapGestureRecognizer k Image:

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

Kód obslužné OnTapGestureRecognizerTapped rutiny události by měl být přidán do souboru kódu za kódem:

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

Ekvivalentní kód jazyka C# je:

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

Ve výchozím nastavení Image odpoví na jedno klepnutí. NumberOfTapsRequired Pokud je vlastnost nastavena na větší než jeden, obslužná rutina události se spustí pouze v případě, že klepnutí dojde v nastaveném časovém období. Pokud se v daném období nenaskytnou druhé (nebo následné) klepnutí, budou se efektivně ignorovat.

Definování masky tlačítka

Objekt TapGestureRecognizerButtons vlastnost typu ButtonsMask, která definuje, zda primární nebo sekundární tlačítko myši, nebo obojí, aktivuje gesto v Androidu, Mac Catalyst a Windows. Výčet ButtonsMask definuje následující členy:

  • Primary představuje primární tlačítko myši, což je obvykle levé tlačítko myši.
  • Secondary představuje sekundární tlačítko myši, což je obvykle pravé tlačítko myši.

Následující příklad ukazuje TapGestureRecognizer , že zjistí klepnutí pomocí sekundárního tlačítka myši:

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

Obslužná rutina události události Tapped může určit, které tlačítko aktivovalo gesto:

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

Ekvivalentní kód jazyka C# je:

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

Upozorňující

Ve Windows nastaví vlastnost tak, TapGestureRecognizer Buttons aby nerespektovala Secondary NumberOfTapsRequired vlastnost, pokud je větší než jedna.

Kromě toho lze definovat, TapGestureRecognizer aby buď primární nebo sekundární tlačítko myši aktivovalo gesto:

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

Ekvivalentní kód jazyka C# je:

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

Získání pozice gesta

Pozici, ve které došlo k gestu klepnutí, lze získat voláním GetPosition metody na objektu TappedEventArgs . Metoda GetPosition přijímá Element? argument a vrací pozici jako Point? objekt:

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

Argument Element? definuje prvek, ke které by měla být pozice získána vzhledem. Zadání null hodnoty jako tohoto argumentu znamená, že GetPosition metoda vrátí Point? objekt, který definuje pozici gesta klepnutí uvnitř okna.