Aracılığıyla paylaş


Dokunma hareketi tanıyıcısı ekleme

Dokunma hareketi, dokunma algılama için kullanılır ve TapGestureRecognizer sınıfıyla uygulanır.

Bir kullanıcı arabirimi öğesini dokunma hareketiyle tıklanabilir hale getirmek için bir TapGestureRecognizer örnek oluşturun, olayı işleyin Tapped ve kullanıcı arabirimi öğesindeki koleksiyona GestureRecognizers yeni hareket tanıyıcısını ekleyin. Aşağıdaki kod örneği, bir öğeye eklenmiş bir TapGestureRecognizerImage öğeyi gösterir:

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

Görüntü varsayılan olarak tek dokunmalara yanıt verir. NumberOfTapsRequired özelliğini iki kez dokunmayı (veya gerekirse daha fazla dokunmayı) bekleyecek şekilde ayarlayın.

tapGestureRecognizer.NumberOfTapsRequired = 2; // double-tap

NumberOfTapsRequired Birin üzerinde ayarlandığında, olay işleyicisi yalnızca dokunmaların belirli bir süre içinde gerçekleşmesi durumunda yürütülür (bu süre yapılandırılamaz). İkinci (veya sonraki) dokunmalar bu süre içinde gerçekleşmezse, bunlar etkili bir şekilde yoksayılır ve 'dokunma sayısı' yeniden başlatılır.

Xaml Kullanma

Eklenen özellikler kullanılarak Xaml'deki bir denetime bir hareket tanıyıcı eklenebilir. Resme ekleme TapGestureRecognizer söz dizimi aşağıda gösterilmiştir (bu örnekte iki kez dokunma olayı tanımlama):

<Image Source="tapped.jpg">
    <Image.GestureRecognizers>
        <TapGestureRecognizer
                Tapped="OnTapGestureRecognizerTapped"
                NumberOfTapsRequired="2" />
  </Image.GestureRecognizers>
</Image>

Olay işleyicisinin kodu (örnekte) bir sayacı artırır ve görüntüyü renkten siyah beyaza değiştirir.

void OnTapGestureRecognizerTapped(object sender, EventArgs args)
{
    tapCount++;
    var imageSender = (Image)sender;
    // watch the monkey go from color to black&white!
    if (tapCount % 2 == 0) {
        imageSender.Source = "tapped.jpg";
    } else {
        imageSender.Source = "tapped_bw.jpg";
    }
}

ICommand kullanma

Model-View-ViewModel (MVVM) desenini kullanan uygulamalar genellikle olay işleyicilerini doğrudan bağlamak yerine kullanır ICommand . bağlamayı TapGestureRecognizer kodda ayarlayarak kolayca destekleyebilir ICommand :

var tapGestureRecognizer = new TapGestureRecognizer();
tapGestureRecognizer.SetBinding (TapGestureRecognizer.CommandProperty, "TapCommand");
image.GestureRecognizers.Add(tapGestureRecognizer);

veya Xaml kullanarak:

<Image Source="tapped.jpg">
    <Image.GestureRecognizers>
        <TapGestureRecognizer
            Command="{Binding TapCommand}"
            CommandParameter="Image1" />
    </Image.GestureRecognizers>
</Image>

Bu görünüm modelinin tam kodu örnekte bulunabilir. Command İlgili uygulama ayrıntıları aşağıda gösterilmiştir:

public class TapViewModel : INotifyPropertyChanged
{
    int taps = 0;
    ICommand tapCommand;
    public TapViewModel () {
        // configure the TapCommand with a method
        tapCommand = new Command (OnTapped);
    }
    public ICommand TapCommand {
        get { return tapCommand; }
    }
    void OnTapped (object s)  {
        taps++;
        Debug.WriteLine ("parameter: " + s);
    }
    //region INotifyPropertyChanged code omitted
}