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 doCommand
. - 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 TapGestureRecognizer má Buttons 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.