Vytvoření vizuálního rendereru Xamarin.Forms

Xamarin.Forms Vizuál umožňuje vytváření a selektivní použití rendererů na VisualElement objekty bez nutnosti podtřídy Xamarin.Forms zobrazení. Vykreslovací modul, který určuje IVisual typ jako součást svého ExportRendererAttributezobrazení, se použije k vykreslení výslovného souhlasu v zobrazeních místo výchozího vykreslovacího modulu. Při výběru Visual vykreslovacího modulu se vlastnost zobrazení zkontroluje a zahrne do procesu výběru vykreslovacího modulu.

Důležité

Visual Vlastnost nelze v současné době po vykreslení zobrazení změnit, ale v budoucí verzi se to změní.

Proces vytváření a využívání vykreslovacího modulu vizuálu Xamarin.Forms je následující:

  1. Vytvořte vykreslovací moduly platformy pro požadované zobrazení. Další informace naleznete v tématu Vytváření rendererů.
  2. Vytvořte typ, který je odvozen od IVisual. Další informace najdete v tématu Vytvoření typu IVisual.
  3. IVisual Zaregistrujte typ jako součástExportRendererAttribute, který ozdobí vykreslovací moduly. Další informace najdete v tématu Registrace typu IVisual.
  4. Využití vykreslovacího modulu vizuálu nastavením Visual vlastnosti v zobrazení na IVisual název. Další informace naleznete v tématu Využití vykreslovacího modulu vizuálu.
  5. [volitelné] Zaregistrujte název pro IVisual typ. Další informace najdete v tématu Registrace názvu typu IVisual.

Vytváření rendererů platformy

Informace o vytvoření třídy rendereru naleznete v tématu Vlastní renderery. Všimněte si však, že vykreslení vizuálu Xamarin.Forms se použije v zobrazení bez nutnosti podtřídy zobrazení.

Třídy rendereru zde implementují vlastní Button , který zobrazuje jeho text se stínem.

iOS

Následující příklad kódu ukazuje renderer tlačítka pro iOS:

public class CustomButtonRenderer : ButtonRenderer
{
    protected override void OnElementChanged(ElementChangedEventArgs<Button> e)
    {
        base.OnElementChanged(e);

        if (e.OldElement != null)
        {
            // Cleanup
        }

        if (e.NewElement != null)
        {
            Control.TitleShadowOffset = new CoreGraphics.CGSize(1, 1);
            Control.SetTitleShadowColor(Color.Black.ToUIColor(), UIKit.UIControlState.Normal);
        }
    }
}

Android

Následující příklad kódu ukazuje renderer tlačítka pro Android:

public class CustomButtonRenderer : Xamarin.Forms.Platform.Android.AppCompat.ButtonRenderer
{
    public CustomButtonRenderer(Context context) : base(context)
    {
    }

    protected override void OnElementChanged(ElementChangedEventArgs<Button> e)
    {
        base.OnElementChanged(e);

        if (e.OldElement != null)
        {
            // Cleanup
        }

        if (e.NewElement != null)
        {
            Control.SetShadowLayer(5, 3, 3, Color.Black.ToAndroid());
        }
    }
}

Vytvoření typu IVisual

V knihovně pro různé platformy vytvořte typ odvozený z IVisual:

public class CustomVisual : IVisual
{
}

Typ CustomVisual lze poté zaregistrovat vůči třídám rendereru, což Button umožňuje, aby se objekty přihlásily k používání rendererů.

Registrace typu IVisual

V projektech platformy přidejte úroveň ExportRendererAttribute sestavení:

[assembly: ExportRenderer(typeof(Xamarin.Forms.Button), typeof(CustomButtonRenderer), new[] { typeof(CustomVisual) })]
namespace VisualDemos.iOS
{
    public class CustomButtonRenderer : ButtonRenderer
    {
        protected override void OnElementChanged(ElementChangedEventArgs<Button> e)
        {
            // ...
        }
    }
}

V tomto příkladu pro projekt platformy iOS určuje, ExportRendererAttribute že CustomButtonRenderer třída se použije k vykreslení objektů Button s typem IVisual registrovaným jako třetí argument. Vykreslovací modul, který určuje IVisual typ jako součást svého ExportRendererAttributezobrazení, se použije k vykreslení výslovného souhlasu v zobrazeních místo výchozího vykreslovacího modulu.

Využití vykreslovacího modulu vizuálu

Objekt Button se může přihlásit k používání tříd rendereru nastavením jeho Visual vlastnosti na Custom:

<Button Visual="Custom"
        Text="CUSTOM BUTTON"
        BackgroundColor="{StaticResource PrimaryColor}"
        TextColor="{StaticResource SecondaryTextColor}"
        HorizontalOptions="FillAndExpand" />

Poznámka:

V JAZYCE XAML převaděč typů odebere nutnost zahrnout do hodnoty vlastnosti příponu Visual "Visual". Můžete ale zadat také úplný název typu.

Ekvivalentní kód jazyka C# je:

Button button = new Button { Text = "CUSTOM BUTTON", ... };
button.Visual = new CustomVisual();

Při výběru Visual vykreslovacího modulu je vlastnost Button prohledána a zahrnuta do procesu výběru rendereru. Pokud se vykreslovací modul nenachází, Xamarin.Forms použije se výchozí renderer.

Následující snímky obrazovky znázorňují vykreslený Buttontext, který zobrazuje jeho text se stínem:

Snímek obrazovky s vlastním tlačítkem se stínovým textem v iOSu a Androidu

Registrace názvu pro typ IVisual

VisualAttribute se použít k volitelné registraci jiného IVisual názvu pro typ. Tento přístup se dá použít k řešení konfliktů názvů mezi různými knihovnami vizuálů nebo v situacích, kdy chcete jenom odkazovat na vizuál jiným názvem, než je název jeho typu.

Měla by být definována VisualAttribute na úrovni sestavení v knihovně pro různé platformy nebo v projektu platformy:

[assembly: Visual("MyVisual", typeof(CustomVisual))]

Typ IVisual pak můžete využívat prostřednictvím svého registrovaného názvu:

<Button Visual="MyVisual"
        ... />

Poznámka:

Při používání vizuálu prostřednictvím registrovaného názvu musí být zahrnuta jakákoli přípona vizuálu.