Úvod do vlastních rendererů
Vlastní renderery poskytují výkonný přístup k přizpůsobení vzhledu a chování ovládacích Xamarin.Forms prvků. Dají se použít pro malé změny stylů nebo sofistikované přizpůsobení rozložení a chování specifické pro platformu. Tento článek obsahuje úvod k vlastním vykreslovacím objektům a popisuje proces vytvoření vlastního rendereru.
Xamarin.FormsStránky, rozložení a ovládací prvky představují společné rozhraní API pro popis mobilních uživatelských rozhraní pro různé platformy. Každá stránka, rozložení a ovládací prvek se na každé platformě vykresluje odlišně, a to pomocí Renderer
třídy, která zase vytvoří nativní ovládací prvek (odpovídající Xamarin.Forms reprezentaci), uspořádá ho na obrazovce a přidá chování zadané ve sdíleném kódu.
Vývojáři mohou implementovat vlastní třídy Renderer
a přizpůsobit tak vzhled a chování ovládacího prvku. Vlastní vykreslovací moduly pro daný typ lze přidat do jednoho projektu aplikace a přizpůsobit ovládací prvek na jednom místě a zároveň povolit výchozí chování na jiných platformách; nebo do každého projektu aplikace je možné přidat různé vlastní vykreslovací moduly a vytvořit tak jiný vzhled a chování v iOSu, Androidu a Univerzální platforma Windows (UPW). Implementace vlastní třídy rendereru pro provedení jednoduchého přizpůsobení ovládacího prvku je často velmi náročné odezvy. Efekty tento proces zjednodušují a obvykle se používají pro malé změny stylů. Další informace najdete v článku o efektech.
Prozkoumání, proč jsou vlastní vykreslovací moduly nezbytné
Změna vzhledu ovládacího prvku bez použití vlastního rendereru je dvoustupňový proces, který zahrnuje vytvoření vlastního Xamarin.Forms ovládacího prvku prostřednictvím podtřídy a následné využívání vlastního ovládacího prvku místo původního ovládacího prvku. Následující příklad kódu ukazuje příklad podtřídy Entry
ovládacího prvku:
public class MyEntry : Entry
{
public MyEntry ()
{
BackgroundColor = Color.Gray;
}
}
Ovládací MyEntry
prvek je Entry
ovládací prvek, ve kterém BackgroundColor
je nastavena na šedou a lze na tento prvek odkazovat v jazyce Xaml deklarací oboru názvů pro jeho umístění a použitím předpony oboru názvů v ovládacím prvku. Následující příklad kódu ukazuje, jak MyEntry
lze vlastní ovládací prvek využívat pomocí ContentPage
:
<ContentPage
...
xmlns:local="clr-namespace:CustomRenderer;assembly=CustomRenderer"
...>
...
<local:MyEntry Text="In Shared Code" />
...
</ContentPage>
Předpona local
oboru názvů může být cokoli. namespace
Hodnoty ale assembly
musí odpovídat podrobnostem vlastního ovládacího prvku. Jakmile je obor názvů deklarován, předpona se použije k odkazování na vlastní ovládací prvek.
Poznámka:
xmlns
Definování je mnohem jednodušší v projektech knihoven .NET Standard než sdílené projekty. Knihovna .NET Standard je zkompilována do sestavení, takže je snadné určit, jaká assembly=CustomRenderer
hodnota má být. Při použití sdílených projektů se všechny sdílené prostředky (včetně XAML) kompilují do každého odkazujícího projektu, což znamená, že pokud mají projekty iOS, Android a UPW vlastní názvy sestavení, není možné deklaraci napsat xmlns
, protože hodnota musí být pro každou aplikaci jiná. Vlastní ovládací prvky v JAZYCE XAML pro sdílené projekty budou vyžadovat, aby byl každý projekt aplikace nakonfigurovaný se stejným názvem sestavení.
Vlastní MyEntry
ovládací prvek se pak vykreslí na každé platformě se šedým pozadím, jak je znázorněno na následujících snímcích obrazovky:
Změna barvy pozadí ovládacího prvku na každé platformě se provádí čistě prostřednictvím podtřídy ovládacího prvku. Tato technika je však omezená v tom, co může dosáhnout, protože není možné využít výhod vylepšení a přizpůsobení specifických pro platformu. V případě potřeby je nutné implementovat vlastní vykreslovací moduly.
Vytvoření vlastní třídy rendereru
Proces vytvoření vlastní třídy rendereru je následující:
- Vytvořte podtřídu třídy rendereru, která vykreslí nativní ovládací prvek.
- Přepište metodu, která vykreslí nativní ovládací prvek a zapisuje logiku pro přizpůsobení ovládacího prvku.
OnElementChanged
Metoda se často používá k vykreslení nativního ovládacího prvku, který je volána při vytvoření odpovídajícího Xamarin.Forms ovládacího prvku. ExportRenderer
Přidejte atribut do vlastní třídy rendereru, aby bylo možné určit, že bude použita k vykreslení Xamarin.Forms ovládacího prvku. Tento atribut se používá k registraci vlastního rendereru v Xamarin.Forms.
Poznámka:
Pro většinu Xamarin.Forms prvků je volitelné poskytnout vlastní renderer v každém projektu platformy. Pokud není zaregistrovaný vlastní renderer, použije se výchozí renderer základní třídy ovládacího prvku. Vlastní renderery jsou však vyžadovány v každém projektu platformy při vykreslování View nebo ViewCell elementu.
Témata v této sérii poskytují ukázky a vysvětlení tohoto procesu pro různé Xamarin.Forms prvky.
Řešení problému
Pokud je vlastní ovládací prvek obsažený v projektu knihovny .NET Standard, který byl přidán do řešení (tj. ne knihovna .NET Standard vytvořená šablonou projektu aplikace Visual Studio pro Mac/Visual StudioXamarin.Forms), může při pokusu o přístup k vlastnímu ovládacímu prvku dojít v iOSu k výjimce. Pokud k tomuto problému dojde, můžete ho vyřešit vytvořením odkazu na vlastní ovládací prvek z AppDelegate
třídy:
var temp = new ClassInPCL(); // in AppDelegate, but temp not used anywhere
Tím se vynutí, aby kompilátor rozpoznal ClassInPCL
typ tím, že ho přeloží. Preserve
Případně lze atribut přidat do AppDelegate
třídy, aby se dosáhlo stejného výsledku:
[assembly: Preserve (typeof (ClassInPCL))]
Tím se vytvoří odkaz na ClassInPCL
typ, který indikuje, že se vyžaduje za běhu. Další informace naleznete v tématu Zachování kódu.
Shrnutí
Tento článek obsahuje úvod k vlastním vykreslovacím procesům a popisuje proces vytvoření vlastního rendereru. Vlastní renderery poskytují výkonný přístup k přizpůsobení vzhledu a chování ovládacích Xamarin.Forms prvků. Dají se použít pro malé změny stylů nebo sofistikované přizpůsobení rozložení a chování specifické pro platformu.