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ı ButtonRenderer
bir sınıfta kapsüllenmiş platforma özgü bir düğmeyle işlenir. burada, uygulamasının ButtonRenderer
iOS 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:
- Xamarin.Forms. Platform (çok küçük)
- Xamarin.Forms. Platform.iOS
- Xamarin.Forms. Platform.Android
- Xamarin.Forms. Platform.UAP
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:
TView
kısıtlanmışXamarin.Forms.View
TNativeView
kısıtlanmışUIKit.UIView
Android'in ViewRenderer<TView, TNativeView>
genel bağımsız değişkenleri vardır:
TView
kısıtlanmışXamarin.Forms.View
TNativeView
kısıtlanmışAndroid.Views.View
UWP ViewRenderer<TElement, TNativeElement>
farklı adlandırılmış genel bağımsız değişkenlere sahiptir:
TElement
kısıtlanmışXamarin.Forms.View
TNativeElement
kısıtlanmışWindows.UI.Xaml.FrameworkElement
bir işleyici yazarken, öğesinden View
bir 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 View
tü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:
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 Color
tek 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:
Element
Xamarin.Forms, öğesiControl
, yerel görünüm veya pencere öğesi veya denetim nesnesi
Bu özelliklerin türleri, genel parametreleri ViewRenderer
tarafından belirlenir. Bu örnekte türündedir Element
EllipseView
.
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:
- iOS:
EllipseViewRenderer
, üç nokta için birEllipseUIView
sınıf kullanır. - Android:
EllipseViewRenderer
, üç nokta için birEllipseDrawableView
sınıf kullanır. - UWP:
EllipseViewRenderer
, yerel WindowsEllipse
sınıfını kullanabilir.
EllipseDemo sınıfı şu EllipseView
nesnelerden birkaçını görüntüler:
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ı normaleSlider
Xamarin.Formsbenzer, ancak ve Maximum
değerleri arasında bir dizi ayrık adım belirtmeye Minimum
izin verir.
Üç işleyici şunlardır:
- Ios:
StepSliderRenderer
- Android:
StepSliderRenderer
- UWP:
StepSliderRenderer
İşleyiciler yerel denetimdeki değişiklikleri algılar ve ardından içinde tanımlanan StepSlider
bağlanabilir bir özelliğe başvuran öğesini çağırarak SetValueFromRenderer
bir olayı tetiklesine StepSlider
ValueChanged
neden olan bir değişiklik oluşturur.
StepSliderDemo örneği bu yeni kaydırıcıyı gösterir.