Udostępnij za pośrednictwem


Podsumowanie rozdziału 27. Niestandardowe programy renderujące

Uwaga

Ta książka została opublikowana wiosną 2016 roku i od tego czasu nie została zaktualizowana. Jest wiele w książce, która pozostaje cenna, ale niektóre materiały są nieaktualne, a niektóre tematy nie są już całkowicie poprawne ani kompletne.

Element Xamarin.Forms taki jak Button jest renderowany za pomocą przycisku specyficznego dla platformy hermetyzowanego w klasie o nazwie ButtonRenderer. Poniżej przedstawiono wersję systemu iOS systemu ButtonRenderer, wersję systemu Android systemu ButtonRendereri wersję platformy UWP systemu ButtonRenderer.

W tym rozdziale omówiono sposób pisania własnych modułów renderujących w celu utworzenia niestandardowych widoków mapowanych na obiekty specyficzne dla platformy.

Kompletna hierarchia klas

Istnieją cztery zestawy zawierające Xamarin.Forms kod specyficzny dla platformy. Źródło można wyświetlić w witrynie GitHub, korzystając z następujących linków:

Uwaga

Zestawy WinRT wymienione w książce nie są już częścią tego rozwiązania.

Przykład PlatformClassHierarchy przedstawia hierarchię klas dla zestawów, które są prawidłowe dla platformy wykonawczej.

Zauważysz ważną klasę o nazwie ViewRenderer. Jest to klasa, z której pochodzisz podczas tworzenia modułu renderowania specyficznego dla platformy. Istnieje w trzech różnych wersjach, ponieważ jest on powiązany z systemem wyświetlania platformy docelowej:

System iOS ViewRenderer<TView, TNativeView> ma ogólne argumenty:

System Android ViewRenderer<TView, TNativeView> ma ogólne argumenty:

Platforma UWP ViewRenderer<TElement, TNativeElement> ma inaczej nazwane argumenty ogólne:

Podczas pisania modułu renderowania będziesz wyprowadzać klasę z Viewklasy , a następnie pisać wiele ViewRenderer klas, po jednym dla każdej obsługiwanej platformy. Każda implementacja specyficzna dla platformy będzie odwoływać się do klasy natywnej pochodzącej z typu określonego jako parametru TNativeView lub TNativeElement .

Witaj, niestandardowe programy renderowania!

Program HelloRenderers odwołuje się do widoku niestandardowego o nazwie HelloView w swojej App klasie.

Klasa HelloView jest uwzględniona w projekcie HelloRenderers i po prostu pochodzi z klasy View.

Klasa HelloViewRenderer w projekcie HelloRenderers.iOS pochodzi z klasy ViewRenderer<HelloView, UILabel>. W zastąpieniu OnElementChanged tworzy natywny system iOS UILabel i wywołuje metodę SetNativeControl.

Klasa HelloViewRenderer w projekcie HelloRenderers.Droid pochodzi z klasy ViewRenderer<HelloView, TextView>. W zastąpieniu OnElementChanged tworzy system Android TextView i wywołuje metodę SetNativeControl.

Klasa HelloViewRenderer w projektach HelloRenderers.UWP i innych projektach systemu Windows pochodzi z klasy ViewRenderer<HelloView, TextBlock>. W zastąpieniu OnElementChanged tworzy system Windows TextBlock i wywołuje metodę SetNativeControl.

ViewRenderer Wszystkie pochodne zawierają atrybut na poziomie zestawu, który kojarzy HelloView klasę ExportRenderer z określoną HelloViewRenderer klasą. W ten sposób Xamarin.Forms lokalizuje programy renderowane w poszczególnych projektach platformy:

Potrójny zrzut ekranu przedstawiający widok Hello

Programy renderowania i właściwości

Następny zestaw modułów renderujących implementuje rysunek wielokropka i znajduje się w różnych projektach Xamarin.Formsrozwiązania Book.Platform.

Klasa EllipseView znajduje się na Xamarin.Formsplatformie Book.Platform . Klasa jest podobna do BoxView i definiuje tylko jedną właściwość: Color typu Color.

Programy renderujące mogą przenosić wartości właściwości ustawione na View obiekt macierzysty przez zastąpienie OnElementPropertyChanged metody w programie renderujący. W ramach tej metody (i w większości modułu renderowania) dostępne są dwie właściwości:

  • ElementXamarin.Forms, element
  • Control, widok macierzysty lub widżet lub obiekt sterujący

Typy tych właściwości są określane przez parametry ogólne do ViewRenderer. W tym przykładzie Element jest typu EllipseView.

Przesłonięcia OnElementPropertyChanged mogą zatem przenieść Color wartość Element obiektu natywnego Control , prawdopodobnie z jakąś konwersją. Trzy programy renderowania to:

Klasa EllipseDemo wyświetla kilka z tych EllipseView obiektów:

Potrójny zrzut ekranu przedstawiający pokaz elipsy

BouncingBall odbija się EllipseView od boków ekranu.

Programy renderowania i zdarzenia

Możliwe jest również, aby programy renderowane pośrednio generowały zdarzenia. Klasa jest podobna StepSlider do normalnego Xamarin.FormsSlider , ale umożliwia określenie kilku dyskretnych kroków między wartościami Minimum i Maximum .

Trzy programy renderowania to:

Programy renderujące wykrywają zmiany w kontrolce natywnej, a następnie wywołują SetValueFromRenderermetodę , która odwołuje się do właściwości możliwej do powiązania zdefiniowanej w elemencie StepSlider, co powoduje StepSlider wyzwolenie ValueChanged zdarzenia.

Przykład StepSliderDemo pokazuje ten nowy suwak.