Uwaga
Dostęp do tej strony wymaga autoryzacji. Może 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 ButtonRenderer
i 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:
TView
ograniczone doXamarin.Forms.View
TNativeView
ograniczone doUIKit.UIView
System Android ViewRenderer<TView, TNativeView>
ma ogólne argumenty:
TView
ograniczone doXamarin.Forms.View
TNativeView
ograniczone doAndroid.Views.View
Platforma UWP ViewRenderer<TElement, TNativeElement>
ma inaczej nazwane argumenty ogólne:
TElement
ograniczone doXamarin.Forms.View
TNativeElement
ograniczone doWindows.UI.Xaml.FrameworkElement
Podczas pisania modułu renderowania będziesz wyprowadzać klasę z View
klasy , 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:
Element
Xamarin.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żywaEllipseUIView
klasy wielokropka. - Android:
EllipseViewRenderer
, który używaEllipseDrawableView
klasy 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ą SetValueFromRenderer
metodę , 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.