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 ExportRendererAttribute
zobrazení, 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í:
- Vytvořte vykreslovací moduly platformy pro požadované zobrazení. Další informace naleznete v tématu Vytváření rendererů.
- Vytvořte typ, který je odvozen od
IVisual
. Další informace najdete v tématu Vytvoření typu IVisual. IVisual
Zaregistrujte typ jako součástExportRendererAttribute
, který ozdobí vykreslovací moduly. Další informace najdete v tématu Registrace typu IVisual.- Využití vykreslovacího modulu vizuálu nastavením
Visual
vlastnosti v zobrazení naIVisual
název. Další informace naleznete v tématu Využití vykreslovacího modulu vizuálu. - [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 ExportRendererAttribute
zobrazení, 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ý Button
text, který zobrazuje jeho text se stínem:
Registrace názvu pro typ IVisual
Dá 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.