Sdílet prostřednictvím


Ú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:

Vlastní ovládací prvek MyEntry na jednotlivých platformách

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í:

  1. Vytvořte podtřídu třídy rendereru, která vykreslí nativní ovládací prvek.
  2. 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.
  3. 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.