Erstellen eines Xamarin.Forms visuellen Renderers
Xamarin.Forms Visual ermöglicht das Erstellen und selektive Anwenden von Renderern auf VisualElement
Objekte, ohne dass Sie Unterklassenansichten Xamarin.Forms verwenden müssen. Ein Renderer, der einen IVisual
Typ als Teil des ExportRendererAttribute
Elements angibt, wird verwendet, um angemeldete Ansichten anstelle des Standardrenderers zu rendern. Zur Rendererauswahl wird die Visual
Eigenschaft der Ansicht überprüft und in den Rendererauswahlprozess einbezogen.
Wichtig
Visual
Die Eigenschaft kann derzeit nicht geändert werden, nachdem die Ansicht gerendert wurde, dies ändert sich jedoch in einer zukünftigen Version.
Der Prozess zum Erstellen und Verwenden eines Xamarin.Forms visuellen Renderers lautet:
- Erstellen Sie Plattformrenderer für die erforderliche Ansicht. Weitere Informationen finden Sie unter Erstellen von Renderern.
- Erstellen Sie einen Typ, der von
IVisual
. Weitere Informationen finden Sie unter Erstellen eines IVisual-Typs. - Registrieren Sie den
IVisual
Typ als Teil derExportRendererAttribute
Renderer. Weitere Informationen finden Sie unter Registrieren des IVisual-Typs. - Verwenden Sie den visuellen Renderer, indem Sie die
Visual
Eigenschaft für die Ansicht auf denIVisual
Namen festlegen. Weitere Informationen finden Sie unter Verwenden des visuellen Renderers. - [optional] Registrieren Sie einen Namen für den
IVisual
Typ. Weitere Informationen finden Sie unter Registrieren eines Namens für den IVisual-Typ.
Erstellen von Plattformrenderern
Informationen zum Erstellen einer Rendererklasse finden Sie unter "Benutzerdefinierte Renderer". Beachten Sie jedoch, dass ein Xamarin.Forms visueller Renderer auf eine Ansicht angewendet wird, ohne die Ansicht unterklassen zu müssen.
Die hier beschriebenen Rendererklassen implementieren eine benutzerdefinierte Klasse Button
, die ihren Text mit einem Schatten anzeigt.
iOS
Das folgende Codebeispiel zeigt den Schaltflächenrenderer für 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
Das folgende Codebeispiel zeigt den Schaltflächenrenderer für 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());
}
}
}
Erstellen eines IVisual-Typs
Erstellen Sie in Ihrer plattformübergreifenden Bibliothek einen Typ, der von IVisual
:
public class CustomVisual : IVisual
{
}
Der CustomVisual
Typ kann dann für die Rendererklassen registriert werden, wodurch Button
Objekte sich für die Verwendung der Renderer entscheiden können.
Registrieren des IVisual-Typs
Fügen Sie in den Plattformprojekten die ExportRendererAttribute
Assemblyebene hinzu:
[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)
{
// ...
}
}
}
In diesem Beispiel für das iOS-Plattformprojekt gibt die ExportRendererAttribute
Klasse an, dass die CustomButtonRenderer
Klasse verwendet wird, um verbrauchende Button
Objekte zu rendern, wobei der IVisual
Typ als drittes Argument registriert ist. Ein Renderer, der einen IVisual
Typ als Teil des ExportRendererAttribute
Elements angibt, wird verwendet, um angemeldete Ansichten anstelle des Standardrenderers zu rendern.
Verwenden des visuellen Renderers
Ein Button
Objekt kann sich für die Verwendung der Rendererklassen entscheiden, indem die Visual
Eigenschaft auf Custom
:
<Button Visual="Custom"
Text="CUSTOM BUTTON"
BackgroundColor="{StaticResource PrimaryColor}"
TextColor="{StaticResource SecondaryTextColor}"
HorizontalOptions="FillAndExpand" />
Hinweis
In XAML entfernt ein Typkonverter die Notwendigkeit, das Suffix "Visual" in den Visual
Eigenschaftswert aufzunehmen. Der vollständige Typname kann jedoch auch angegeben werden.
Der entsprechende C#-Code lautet:
Button button = new Button { Text = "CUSTOM BUTTON", ... };
button.Visual = new CustomVisual();
Zur Rendererauswahlzeit wird die Visual
Eigenschaft der Button
Prüfung und in den Rendererauswahlprozess einbezogen. Wenn sich ein Renderer nicht befindet, wird der Xamarin.Forms Standardrenderer verwendet.
Die folgenden Screenshots zeigen das gerenderte Button
Objekt, das seinen Text mit einem Schatten anzeigt:
Registrieren eines Namens für den IVisual-Typ
Dies VisualAttribute
kann verwendet werden, um optional einen anderen Namen für den IVisual
Typ zu registrieren. Dieser Ansatz kann verwendet werden, um Namenskonflikte zwischen verschiedenen visuellen Bibliotheken aufzulösen, oder in Situationen, in denen Sie nur mit einem anderen Namen als dem Typnamen auf ein Visuelles Element verweisen möchten.
Dies VisualAttribute
sollte auf Assemblyebene entweder in der plattformübergreifenden Bibliothek oder im Plattformprojekt definiert werden:
[assembly: Visual("MyVisual", typeof(CustomVisual))]
Der IVisual
Typ kann dann über seinen registrierten Namen genutzt werden:
<Button Visual="MyVisual"
... />
Hinweis
Wenn Sie ein Visuelles Element über seinen registrierten Namen verwenden, muss jedes "Visuelle" Suffix eingeschlossen werden.