Dokunma hareketini tanıma

Dokunma algılama için .NET Çok platformlu Uygulama Kullanıcı Arabirimi (.NET MAUI) dokunma hareketi tanıyıcısı kullanılır ve sınıfıyla birlikte TapGestureRecognizer uygulanır. Bu sınıf aşağıdaki özellikleri tanımlar:

  • ButtonsButtonsMask, birincil veya ikincil fare düğmesinin mi yoksa her ikisinin birden mi Android, Mac Catalyst ve Windows'ta hareketi tetiklediğini tanımlar. Daha fazla bilgi için bkz . Düğme maskelerini tanımlama.
  • Command, türündedir ICommandve bir dokunma tanındığında yürütülür.
  • CommandParameter, türündeki objectparametresine Commandgeçirilir.
  • NumberOfTapsRequired, türündedir int. Bu, bir dokunma hareketini tanımak için gereken dokunma sayısını temsil eder. Bu özelliğin varsayılan değeri 1'dir.

Bu özellikler nesneler tarafından BindableProperty desteklenir; bu da veri bağlamalarının hedefleri olabileceği ve stillendirilebileceği anlamına gelir.

sınıfı, TapGestureRecognizer bir Tapped dokunma tanındığında tetiklenen bir olayı da tanımlar. Olaya TappedEventArgs eşlik Tapped eden nesne, tanımlıysa özelliği tarafından CommandParameter geçirilen değeri gösteren türdeki object bir Parameter özelliği tanımlar. TappedEventArgs Nesnesi ayrıca bir Buttons özellik ve bir GetPosition yöntem tanımlar. Buttons özelliği türündedir ButtonsMaskve Birincil veya ikincil fare düğmesinin Android, Mac Catalyst ve Windows'ta hareket tanıyıcıyı tetikleyip tetiklemediğini belirlemek için kullanılabilir. yöntemi, GetPosition dokunma hareketinin algılandığı konumu temsil eden bir Point? nesne döndürür. Düğme maskeleri hakkında daha fazla bilgi için bkz . Düğme maskesini tanımlama. Yöntemi hakkında GetPosition daha fazla bilgi için bkz . Hareket konumunu alma.

Uyarı

A TapGestureRecognizer , Windows'ta iki kez dokunmaktan fazlasını tanıyamaz.

TapGestureRecognizer oluşturma

View Dokunma hareketini tanımak için bir TapGestureRecognizer nesne oluşturun, olayı işleyin Tapped ve görünümdeki koleksiyona GestureRecognizers yeni hareket tanıyıcısını ekleyin. Aşağıdaki kod örneğinde bir öğesine eklenmiş bir TapGestureRecognizerImagegösterilmektedir:

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

Olay işleyicisinin OnTapGestureRecognizerTapped kodu arka planda kod dosyasına eklenmelidir:

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

Eşdeğer C# kodu:

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

Varsayılan olarak, Image tek dokunmalara yanıt verir. NumberOfTapsRequired Özellik birden büyük olarak ayarlandığında, olay işleyicisi yalnızca dokunmaların belirli bir süre içinde gerçekleşmesi durumunda yürütülür. İkinci (veya sonraki) dokunmalar bu süre içinde gerçekleşmezse, etkili bir şekilde yoksayılır.

Düğme maskesini tanımlama

Bir TapGestureRecognizer nesnenin, birincil veya ikincil fare düğmesinin veya her ikisinin de Android, Mac Catalyst ve Windows'ta hareketi tetikleyip tetiklemeyeceğini tanımlayan türünde ButtonsMaskbir Buttons özelliği vardır. Numaralandırma ButtonsMask aşağıdaki üyeleri tanımlar:

  • Primary , genellikle sol fare düğmesi olan birincil fare düğmesini temsil eder.
  • Secondary , genellikle sağ fare düğmesi olan ikincil fare düğmesini temsil eder.

Aşağıdaki örnekte, ikincil fare düğmesiyle dokunmaları algılayan bir TapGestureRecognizer gösterilir:

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

Olayın olay işleyicisi Tapped , hareketi tetikleyen düğmeyi belirleyebilir:

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

Eşdeğer C# kodu:

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

Uyarı

Windows'da, özelliğini Secondary olarak ayarlayan Buttons bir TapGestureRecognizer özelliği, birden büyük olduğunda özelliğine NumberOfTapsRequired saygı göstermez.

Ayrıca, birincil veya ikincil fare düğmesinin hareketi tetiklemesi için bir TapGestureRecognizer tanımlanabilir:

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

Eşdeğer C# kodu:

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

Hareket konumunu alma

Bir nesnede TappedEventArgs yöntemi çağrılarak dokunma hareketinin GetPosition gerçekleştiği konum elde edilebilir. GetPosition yöntemi bir Element? bağımsız değişken kabul eder ve nesne olarak bir Point? konum döndürür:

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

Element? bağımsız değişkeni, konumun göreli olarak alınması gereken öğeyi tanımlar. Bu bağımsız değişken olarak bir null değer sağlamak, yöntemin GetPosition pencerenin içindeki dokunma hareketinin konumunu tanımlayan bir Point? nesne döndürdüğü anlamına gelir.