Rozpoznawanie gestu naciśnięcia
Funkcja rozpoznawania gestów naciśnięcia interfejsu użytkownika aplikacji wieloplatformowej platformy .NET (.NET MAUI) jest używana do wykrywania naciśnięcia i jest implementowana przy użyciu TapGestureRecognizer klasy . Ta klasa definiuje następujące właściwości:
- Buttons, typu ButtonsMask, który określa, czy podstawowy lub pomocniczy przycisk myszy, czy oba, wyzwala gest w systemach Android, Mac Catalyst i Windows. Aby uzyskać więcej informacji, zobacz Definiowanie masek przycisków.
- Command, typu ICommand, który jest wykonywany po rozpoznaniu naciśnięcia.
- CommandParameter, typu
object
, który jest parametrem przekazanym do .Command
- NumberOfTapsRequired, typu
int
, który reprezentuje liczbę naciśnięcia wymaganych do rozpoznawania gestu naciśnięcia. Wartość domyślna tej właściwości to 1.
Te właściwości są wspierane przez BindableProperty obiekty, co oznacza, że mogą być obiektami docelowymi powiązań danych i stylizowanymi.
Klasa TapGestureRecognizer definiuje Tapped również zdarzenie, które jest wywoływane po rozpoznaniu naciśnięcia. Obiekt TappedEventArgs , który towarzyszy Tapped zdarzeniu definiuje Parameter właściwość typu object
, która wskazuje wartość przekazywaną CommandParameter
przez właściwość, jeśli jest zdefiniowana. Obiekt TappedEventArgs definiuje Buttons również właściwość i metodę GetPosition
. Właściwość Buttons jest typu ButtonsMaski może służyć do określenia, czy podstawowy lub pomocniczy przycisk myszy wyzwolił rozpoznawanie gestów w systemach Android, Mac Catalyst i Windows. Metoda GetPosition
zwraca Point?
obiekt reprezentujący położenie, w którym wykryto gest naciśnięcia. Aby uzyskać więcej informacji o maskach przycisków, zobacz Definiowanie maski przycisku. Aby uzyskać więcej informacji na temat GetPosition
metody, zobacz Pobieranie położenia gestu.
Ostrzeżenie
Obiekt TapGestureRecognizer nie może rozpoznać więcej niż dwukrotnego naciśnięcia w systemie Windows.
Tworzenie elementu TapGestureRecognizer
View Aby rozpoznać gest naciśnięcia, utwórz TapGestureRecognizer obiekt, obsłuż Tapped zdarzenie i dodaj nowy aparat rozpoznawania gestów GestureRecognizers
do kolekcji w widoku. Poniższy przykład kodu przedstawia TapGestureRecognizer dołączony element do elementu Image:
<Image Source="dotnet_bot.png">
<Image.GestureRecognizers>
<TapGestureRecognizer Tapped="OnTapGestureRecognizerTapped"
NumberOfTapsRequired="2" />
</Image.GestureRecognizers>
</Image>
Kod procedury OnTapGestureRecognizerTapped
obsługi zdarzeń powinien zostać dodany do pliku za pomocą kodu:
void OnTapGestureRecognizerTapped(object sender, TappedEventArgs args)
{
// Handle the tap
}
Równoważny kod języka C# to:
TapGestureRecognizer tapGestureRecognizer = new TapGestureRecognizer();
tapGestureRecognizer.Tapped += (s, e) =>
{
// Handle the tap
};
Image image = new Image();
image.GestureRecognizers.Add(tapGestureRecognizer);
Domyślnie Image funkcja odpowiada na pojedyncze naciśnięcia. NumberOfTapsRequired Gdy właściwość jest ustawiona na większą niż jedną, program obsługi zdarzeń zostanie wykonany tylko wtedy, gdy naciśnięcia wystąpią w określonym przedziale czasu. Jeśli drugie (lub kolejne) naciśnięcia nie występują w tym okresie, są one skutecznie ignorowane.
Definiowanie maski przycisku
TapGestureRecognizer Obiekt ma Buttons właściwość typu ButtonsMask, która określa, czy podstawowy lub pomocniczy przycisk myszy, czy oba, wyzwala gest w systemach Android, Mac Catalyst i Windows. Wyliczenie ButtonsMask definiuje następujące elementy członkowskie:
- Primary reprezentuje podstawowy przycisk myszy, który jest zazwyczaj lewym przyciskiem myszy.
- Secondary reprezentuje pomocniczy przycisk myszy, który jest zazwyczaj prawym przyciskiem myszy.
W poniższym przykładzie pokazano, TapGestureRecognizer że wykrywa naciśnięcia za pomocą pomocniczego przycisku myszy:
<Image Source="dotnet_bot.png">
<Image.GestureRecognizers>
<TapGestureRecognizer Tapped="OnTapGestureRecognizerTapped"
Buttons="Secondary" />
</Image.GestureRecognizers>
</Image>
Procedura obsługi zdarzeń dla Tapped zdarzenia może określić, który przycisk wyzwolił gest:
void OnTapGestureRecognizerTapped(object sender, TappedEventArgs args)
{
// Handle the tap
if (args.Buttons == ButtonsMask.Secondary)
{
// Do something
}
}
Równoważny kod języka C# to:
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);
Ostrzeżenie
W systemie Windows właściwość TapGestureRecognizer ustawiana Buttons
Secondary
na wartość nie uwzględnia NumberOfTapsRequired właściwości, gdy jest większa niż jedna.
Ponadto można zdefiniować element TapGestureRecognizer tak, aby podstawowy lub pomocniczy przycisk myszy wyzwalał gest:
<TapGestureRecognizer Tapped="OnTapGestureRecognizerTapped"
Buttons="Primary,Secondary" />
Równoważny kod języka C# to:
TapGestureRecognizer tapGestureRecognizer = new TapGestureRecognizer
{
Buttons = ButtonsMask.Primary | ButtonsMask.Secondary
};
Uzyskiwanie położenia gestu
Położenie, w którym wystąpił gest naciśnięcia, można uzyskać przez wywołanie GetPosition
metody na TappedEventArgs obiekcie. Metoda GetPosition
akceptuje Element?
argument i zwraca pozycję jako Point?
obiekt:
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?
definiuje element, z który należy uzyskać pozycję względem. Podanie wartości jako tego argumentu null
oznacza, że GetPosition
metoda zwraca Point?
obiekt, który definiuje położenie gestu naciśnięcia wewnątrz okna.