Sdílet prostřednictvím


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 ButtonRendererpro iOS , verze Androidu ButtonRenderera verze ButtonRendererUPW .

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ů:

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:

Android ViewRenderer<TView, TNativeView> má obecné argumenty:

UpW ViewRenderer<TElement, TNativeElement> má jiný název obecných argumentů:

Při psaní rendereru budete odvozovat třídu z Viewa 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:

Trojitý snímek obrazovky se zobrazením Hello

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:

  • ElementXamarin.Forms, element
  • Control, 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:

Třída EllipseDemo zobrazí několik z těchto EllipseView objektů:

Triple screenshot of Ellipse Demo

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:

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.