Shrnutí kapitoly 27. Vlastní renderery
Poznámka:
Tato kniha byla publikována na jaře roku 2016 a od té doby nebyla aktualizována. Existuje mnoho v knize, která zůstává cenná, ale některé materiály jsou zastaralé a některá témata už nejsou zcela správná nebo úplná.
Prvek Xamarin.Forms , jako Button
je vykreslen pomocí tlačítka specifického pro platformu zapouzdřený ve třídě s názvem ButtonRenderer
. Zde je verze ButtonRenderer
pro iOS , verze Androidu ButtonRenderer
a verze ButtonRenderer
UPW .
Tato kapitola popisuje, jak můžete napsat vlastní vykreslovací moduly pro vytváření vlastních zobrazení, která se mapují na objekty specifické pro platformu.
Kompletní hierarchie tříd
Existují čtyři sestavení, která obsahují kód specifický pro platformu Xamarin.Forms . Zdroj můžete zobrazit na GitHubu pomocí těchto odkazů:
- Xamarin.Forms. Platforma (velmi malá)
- Xamarin.Forms. Platform.iOS
- Xamarin.Forms. Platform.Android
- Xamarin.Forms. Platform.UAP
Poznámka:
Sestavení WinRT
uvedená v knize již nejsou součástí tohoto řešení.
Ukázka PlatformClassHierarchy zobrazí hierarchii tříd pro sestavení, která jsou platná pro prováděcí platformu.
Všimněte si důležité třídy s názvem ViewRenderer
. Toto je třída, ze které se odvozujete při vytváření rendereru specifického pro platformu. Existuje ve třech různých verzích, protože je svázaný se systémem zobrazení cílové platformy:
IOS ViewRenderer<TView, TNativeView>
má obecné argumenty:
TView
omezené naXamarin.Forms.View
TNativeView
omezené naUIKit.UIView
Android ViewRenderer<TView, TNativeView>
má obecné argumenty:
TView
omezené naXamarin.Forms.View
TNativeView
omezené naAndroid.Views.View
UpW ViewRenderer<TElement, TNativeElement>
má jiný název obecných argumentů:
TElement
omezené naXamarin.Forms.View
TNativeElement
omezené naWindows.UI.Xaml.FrameworkElement
Při psaní rendereru budete odvozovat třídu z View
a pak psát více ViewRenderer
tříd, jednu pro každou podporovanou platformu. Každá implementace specifická pro platformu bude odkazovat na nativní třídu, která je odvozena od typu, který zadáte jako TNativeView
nebo TNativeElement
parametr.
Dobrý den, vlastní renderery!
Program HelloRenderers odkazuje na vlastní zobrazení pojmenované HelloView
ve své App
třídě.
Třída HelloView
je zahrnuta v projektu HelloRenderers a jednoduše je odvozena z View
.
Třída HelloViewRenderer
v projektu HelloRenderers.iOS je odvozena z ViewRenderer<HelloView, UILabel>
. V přepsání OnElementChanged
vytvoří nativní iOS UILabel
a volání SetNativeControl
.
Třída HelloViewRenderer
v projektu HelloRenderers.Droid je odvozena z ViewRenderer<HelloView, TextView>
. V přepsání OnElementChanged
vytvoří Android TextView
a volání SetNativeControl
.
Třída HelloViewRenderer
v HelloRenderers.UWP a jiných projektech Windows je odvozena z ViewRenderer<HelloView, TextBlock>
. V přepsání OnElementChanged
vytvoří Systém Windows TextBlock
a volání SetNativeControl
.
ViewRenderer
Všechny odvozené položky obsahují ExportRenderer
atribut na úrovni sestavení, která přidruží HelloView
třídu ke konkrétní HelloViewRenderer
třídě. Xamarin.Forms Takto vyhledá renderery v jednotlivých projektech platformy:
Renderery a vlastnosti
Další sada rendererů implementuje kresbu se třemi tečkami a nachází se v různých projektech Xamarin.Formsřešení Book.Platform.
Třída EllipseView
je na platformě Xamarin.FormsBook.Platform . Třída je podobná BoxView
a definuje pouze jednu vlastnost: Color
typu Color
.
Renderery mohou přenášet hodnoty vlastností nastavené na View
nativní objekt přepsáním OnElementPropertyChanged
metody v rendereru. V rámci této metody (a ve většině rendereru) jsou k dispozici dvě vlastnosti:
Element
Xamarin.Forms, elementControl
, nativní zobrazení nebo widget nebo řídicí objekt
Typy těchto vlastností jsou určeny obecnými parametry .ViewRenderer
V tomto příkladu Element
je typu EllipseView
.
Přepsání OnElementPropertyChanged
proto může přenést Color
hodnotu do nativního Element
Control
objektu, pravděpodobně s nějakým druhem převodu. Tři renderery jsou:
- iOS:
EllipseViewRenderer
, který používáEllipseUIView
třídu pro tři tečky. - Android:
EllipseViewRenderer
, který používáEllipseDrawableView
třídu pro tři tečky. - UPW:
EllipseViewRenderer
, který může používat nativní třídu WindowsEllipse
.
Třída EllipseDemo zobrazí několik z těchto EllipseView
objektů:
BouncingBall se odrazí EllipseView
od stran obrazovky.
Renderery a události
Renderery také můžou nepřímo generovat události. Třída StepSlider
je podobná normálnímu Xamarin.FormsSlider
, ale umožňuje určit počet samostatných kroků mezi Minimum
hodnotami a hodnotami Maximum
.
Tři renderery jsou:
- Ios:
StepSliderRenderer
- Android:
StepSliderRenderer
- UPW:
StepSliderRenderer
Vykreslovací moduly detekují změny nativního ovládacího prvku a potom volají SetValueFromRenderer
, která odkazuje na vlastnost s možností vazby definovanou v objektu StepSlider
, změnu, která způsobí StepSlider
, že se aktivuje ValueChanged
událost.
Ukázka StepSliderDemo ukazuje tento nový posuvník.