Wprowadzenie do efektów
Efekty umożliwiają dostosowywanie kontrolek natywnych na poszczególnych platformach i są zwykle używane do drobnych zmian stylów. Ten artykuł zawiera wprowadzenie do efektów, przedstawia granicę między efektami i niestandardowymi modułami renderowania oraz opisuje klasę PlatformEffect.
Xamarin.FormsStrony, układy i kontrolki przedstawiają wspólny interfejs API do opisywania międzyplatformowych interfejsów użytkownika mobilnych. Każda strona, układ i kontrolka są renderowane inaczej na każdej platformie przy użyciu Renderer
klasy, która z kolei tworzy natywną kontrolkę (odpowiadającą Xamarin.Forms reprezentacji), rozmieszcza ją na ekranie i dodaje zachowanie określone w kodzie udostępnionym.
Deweloperzy mogą implementować własne, niestandardowe klasy Renderer
, aby dostosowywać wygląd i/lub zachowanie kontrolki. Jednak zaimplementowanie niestandardowej klasy renderera w celu wykonania prostego dostosowania kontrolki jest często dużą odpowiedzią. Efekty upraszczają ten proces, co pozwala na łatwiejsze dostosowywanie kontrolek natywnych na każdej platformie.
Efekty są tworzone w projektach specyficznych dla platformy przez podklasę PlatformEffect
kontrolki, a następnie efekty są używane przez dołączenie ich do odpowiedniej kontrolki w Xamarin.Forms bibliotece .NET Standard lub projekcie Biblioteka udostępniona.
Dlaczego warto używać efektu za pośrednictwem niestandardowego modułu renderowania?
Efekty upraszczają dostosowywanie kontrolki, są wielokrotnego użytku i można je sparametryzować, aby jeszcze bardziej zwiększyć ponowne użycie.
Wszystko, co można osiągnąć za pomocą efektu, można również osiągnąć za pomocą niestandardowego modułu renderowania. Jednak niestandardowe programy renderowania oferują większą elastyczność i dostosowywanie niż efekty. Poniższe wytyczne zawierają listę okoliczności, w których należy wybrać efekt dla niestandardowego modułu renderowania:
- Podczas zmieniania właściwości kontrolki specyficznej dla platformy zaleca się osiągnięcie pożądanego wyniku.
- Niestandardowy moduł renderowania jest wymagany, gdy konieczne jest zastąpienie metod kontrolki specyficznej dla platformy.
- Niestandardowy moduł renderujący jest wymagany, gdy konieczne jest zastąpienie kontrolki specyficznej dla platformy, która implementuje kontrolkę Xamarin.Forms .
Podklasowanie klasy PlatformEffect
W poniższej tabeli wymieniono przestrzeń nazw dla PlatformEffect
klasy na każdej platformie oraz typy jej właściwości:
Platforma | Przestrzeń nazw | Kontener | Kontrolka |
---|---|---|---|
iOS | Xamarin.Forms. Platform.iOS | Widok interfejsu użytkownika | Widok interfejsu użytkownika |
Android | Xamarin.Forms. Platform.Android | Grupa widoków | Widok |
Platforma uniwersalna systemu Windows (UWP) | Xamarin.Forms. Platform.UWP | FrameworkElement | FrameworkElement |
Każda klasa specyficzna dla PlatformEffect
platformy uwidacznia następujące właściwości:
Container
— odwołuje się do kontrolki specyficznej dla platformy używanej do implementowania układu.Control
— odwołuje się do kontrolki specyficznej dla platformy używanej do implementowania kontrolki Xamarin.Forms .Element
— odwołuje się do Xamarin.Forms renderowanej kontrolki.
Efekty nie mają informacji o typie kontenera, kontrolce ani elemecie, do którego są dołączone, ponieważ mogą być dołączone do dowolnego elementu. W związku z tym, gdy efekt jest dołączony do elementu, który nie obsługuje, powinien bezpiecznie obniżyć wydajność lub zgłosić wyjątek. Jednak Container
właściwości , Control
i Element
można rzutować na ich typ implementowania. Aby uzyskać więcej informacji na temat tych typów, zobacz Renderer Base Classes and Native Controls (Klasy bazowe modułu renderowania i kontrolki natywne).
Każda klasa specyficzna dla PlatformEffect
platformy uwidacznia następujące metody, które muszą zostać zastąpione w celu zaimplementowania efektu:
OnAttached
– wywoływany, gdy efekt jest dołączony do kontrolki Xamarin.Forms . Przesłoniętą wersję tej metody, w każdej klasie efektu specyficznego dla platformy, jest miejscem do wykonania dostosowania kontrolki, wraz z obsługą wyjątków w przypadku, gdy efekt nie może być stosowany do określonej Xamarin.Forms kontrolki.OnDetached
— wywoływana, gdy efekt jest odłączony od kontrolki Xamarin.Forms . Przesłoniętą wersję tej metody, w każdej klasie efektu specyficznego dla platformy, jest miejscem do wykonania dowolnego czyszczenia efektu, takiego jak anulowanie rejestrowania programu obsługi zdarzeń.
Ponadto metoda uwidacznia PlatformEffect
metodę OnElementPropertyChanged
, która może być również zastępowana. Ta metoda jest wywoływana, gdy właściwość elementu uległa zmianie. Przesłoniętą wersję tej metody, w każdej klasie efektu specyficznego dla platformy, jest miejscem reagowania na powiązane zmiany właściwości w kontrolce Xamarin.Forms . Należy zawsze sprawdzić zmienioną właściwość, ponieważ to zastąpienie może być wywoływane wiele razy.