Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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:
- Xamarin.Forms. Platforma (bardzo mała)
- Xamarin.Forms. Platform.iOS
- Xamarin.Forms. Platform.Android
- Xamarin.Forms. Platform.UAP
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:
TViewograniczone doXamarin.Forms.ViewTNativeViewograniczone doUIKit.UIView
System Android ViewRenderer<TView, TNativeView> ma ogólne argumenty:
TViewograniczone doXamarin.Forms.ViewTNativeViewograniczone doAndroid.Views.View
Platforma UWP ViewRenderer<TElement, TNativeElement> ma inaczej nazwane argumenty ogólne:
TElementograniczone doXamarin.Forms.ViewTNativeElementograniczone doWindows.UI.Xaml.FrameworkElement
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:
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, elementControl, 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:
- iOS:
EllipseViewRenderer, który używaEllipseUIViewklasy wielokropka. - Android:
EllipseViewRenderer, który używaEllipseDrawableViewklasy wielokropka. - PLATFORMA UWP:
EllipseViewRenderer, która może używać natywnej klasy systemu WindowsEllipse.
Klasa EllipseDemo wyświetla kilka z tych EllipseView obiektów:
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:
- Ios:
StepSliderRenderer - Android:
StepSliderRenderer - Platforma UWP:
StepSliderRenderer
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.

