Aracılığıyla paylaş


Bölüm 27'nin Özeti. Özel işleyiciler

Not

Bu kitap 2016 baharında yayımlanmıştır ve o zamandan beri güncellenmemiştir. Kitapta değerli kalan çok şey vardır, ancak bazı malzemeler eskidir ve bazı konular artık tamamen doğru veya eksiksiz değildir.

Xamarin.Forms gibi Button bir öğe, adlı ButtonRendererbir sınıfta kapsüllenmiş platforma özgü bir düğmeyle işlenir. burada, uygulamasının ButtonRendereriOS sürümü, Android sürümüButtonRenderer ve UWP sürümü yer alır.ButtonRenderer

Bu bölümde, platforma özgü nesnelerle eşlenmiş özel görünümler oluşturmak için kendi işleyicilerinizi nasıl yazabileceğiniz açıklanır.

Tam sınıf hiyerarşisi

Platforma özgü kodu içeren Xamarin.Forms dört derleme vardır. Aşağıdaki bağlantıları kullanarak GitHub'da kaynağı görüntüleyebilirsiniz:

Not

WinRT Kitapta bahsedilen derlemeler artık bu çözümün bir parçası değildir.

PlatformClassHierarchy örneği, yürütülen platform için geçerli olan derlemeler için bir sınıf hiyerarşisi görüntüler.

adlı ViewRendererönemli bir sınıf göreceksiniz. Bu, platforma özgü işleyici oluştururken türetdiğiniz sınıftır. Hedef platformun görünüm sistemine bağlı olduğundan üç farklı sürümde bulunur:

iOS'un ViewRenderer<TView, TNativeView> genel bağımsız değişkenleri vardır:

Android'in ViewRenderer<TView, TNativeView> genel bağımsız değişkenleri vardır:

UWP ViewRenderer<TElement, TNativeElement> farklı adlandırılmış genel bağımsız değişkenlere sahiptir:

bir işleyici yazarken, öğesinden Viewbir sınıf türetecek ve ardından desteklenen her platform için bir tane olmak üzere birden çok ViewRenderer sınıf yazacaksınız. Platforma özgü her uygulama, veya TNativeElement parametresi olarak belirttiğiniz türden türetilen yerel bir sınıfa başvururTNativeView.

Merhaba, özel işleyiciler!

HelloRenderers programı sınıfında adlı HelloView özel bir görünüme başvururApp.

sınıfı HelloRenderers HelloView projesine dahil edilir ve yalnızca öğesinden Viewtüretilir.

HelloViewRenderer HelloRenderers.iOS projesindeki sınıfı öğesinden ViewRenderer<HelloView, UILabel>türetilir. Geçersiz kılmada OnElementChanged yerel bir iOS UILabel oluşturur ve çağırır SetNativeControl.

HelloViewRenderer HelloRenderers.Droid projesindeki sınıf öğesinden ViewRenderer<HelloView, TextView>türetilir. Geçersiz kılmada OnElementChanged bir Android TextView oluşturur ve öğesini çağırır SetNativeControl.

HelloViewRenderer HelloRenderers.UWP ve diğer Windows projelerindeki sınıfı öğesinden ViewRenderer<HelloView, TextBlock>türetilir. Geçersiz kılmada OnElementChanged bir Windows TextBlock oluşturur ve öğesini çağırır SetNativeControl.

ViewRenderer Tüm türevler, derleme düzeyinde sınıfı belirli HelloViewRenderer bir sınıfla ilişkilendiren HelloView bir ExportRenderer öznitelik içerir. Tek tek platform projelerinde işleyicileri bu şekilde Xamarin.Forms bulur:

Merhaba Görünümü'nü üç kez ekran görüntüsü

oluşturucular ve özellikler

Sonraki işleyici kümesi elips çizimi uygular ve Book.Platform çözümünün Xamarin.Formsçeşitli projelerinde bulunur.

Sınıf EllipseView Book.Platform platformundadırXamarin.Forms. sınıfı ile BoxView benzerdir ve türündeki Colortek bir özelliği Color tanımlar.

oluşturucular, işleyicideki yöntemini geçersiz kılarak bir View üzerinde ayarlanan özellik değerlerini yerel nesneye OnElementPropertyChanged aktarabilir. Bu yöntemde (ve işleyicinin çoğunda) iki özellik kullanılabilir:

  • ElementXamarin.Forms, öğesi
  • Control, yerel görünüm veya pencere öğesi veya denetim nesnesi

Bu özelliklerin türleri, genel parametreleri ViewRenderertarafından belirlenir. Bu örnekte türündedir ElementEllipseView.

Bu OnElementPropertyChanged nedenle geçersiz kılma, değerini Element büyük olasılıkla bir tür dönüştürme ile yerel Control nesneye aktarabilirColor. Üç işleyici şunlardır:

EllipseDemo sınıfı şu EllipseView nesnelerden birkaçını görüntüler:

Üç Nokta Tanıtımı'nın üçlü ekran görüntüsü

BouncingBall, ekranın kenarlarından bir EllipseView sektiriyor.

oluşturucular ve olaylar

oluşturucuların dolaylı olarak olay oluşturması da mümkündür. StepSlider sınıfı normaleSliderXamarin.Formsbenzer, ancak ve Maximum değerleri arasında bir dizi ayrık adım belirtmeye Minimum izin verir.

Üç işleyici şunlardır:

İşleyiciler yerel denetimdeki değişiklikleri algılar ve ardından içinde tanımlanan StepSliderbağlanabilir bir özelliğe başvuran öğesini çağırarak SetValueFromRendererbir olayı tetiklesine StepSliderValueChanged neden olan bir değişiklik oluşturur.

StepSliderDemo örneği bu yeni kaydırıcıyı gösterir.