Benutzerdefinierte Xamarin.Forms-Shell-Renderer
Ein Vorteil von Xamarin.Forms-Shell-Anwendungen besteht darin, dass ihr Aussehen und Verhalten über die von den verschiedenen Shell-Klassen bereitgestellten Eigenschaften und Methoden stark angepasst werden kann. Allerdings ist es auch möglich, einen benutzerdefinierten Shell-Renderer zu erstellen, wenn umfangreichere plattformspezifische Anpassungen erforderlich sind. Wie bei anderen benutzerdefinierten Renderern können Sie einen benutzerdefinierten Shell-Renderer zu nur einem Plattformprojekt hinzufügen, um Aussehen und Verhalten anzupassen, während auf der anderen Plattform das Standardverhalten möglich ist. Oder Sie fügen zu jedem Plattformprojekt einen anderen benutzerdefinierten Shell-Renderer hinzu, um Aussehen und Verhalten unter iOS und Android anzupassen.
Shell-Anwendungen werden mit der ShellRenderer
-Klasse unter iOS und Android gerendert. Unter iOS finden Sie die ShellRenderer
-Klasse im Xamarin.Forms.Platform.iOS
-Namespace. Unter Android finden Sie die ShellRenderer
-Klasse im Xamarin.Forms.Platform.Android
-Namespace.
Der Prozess zur Erstellung eines benutzerdefinierten Shell-Renderers sieht folgendermaßen aus:
- Erstellen Sie Unterklassen für die
Shell
-Klasse. Dies wird bereits in Ihrer Shell-Anwendung durchgeführt. - Verarbeiten Sie die
Shell
-Klasse mit Unterklassen. Dies wird bereits in Ihrer Shell-Anwendung durchgeführt. - Erstellen Sie auf den erforderlichen Plattformen eine benutzerdefinierte Rendererklasse, die von der
ShellRenderer
-Klasse abgeleitet ist.
Erstellen einer benutzerdefinierten Renderer-Klasse
Gehen Sie folgendermaßen vor, um eine Klasse für einen benutzerdefinierten Shell-Renderer zu erstellen:
- Erstellen Sie eine Unterklasse der
ShellRenderer
-Klasse. - Überschreiben Sie die erforderlichen Methoden, um die erforderliche Anpassung durchzuführen.
- Fügen Sie ein
ExportRendererAttribute
-Objekt zurShellRenderer
-Unterklasse hinzu, um anzugeben, dass es zum Rendern der Shell-Anwendung verwendet wird. Dieses Attribut wird verwendet, um den benutzerdefinierten Renderer bei Xamarin.Forms zu registrieren.
Hinweis
Optional kann ein benutzerdefinierter Shell-Renderer in jedem Plattformprojekt bereitgestellt werden. Wenn kein benutzerdefinierter Renderer registriert wurde, wird die ShellRenderer
-Standardklasse verwendet.
Die ShellRenderer
-Klasse stellt die folgenden überschreibbaren Methoden zur Verfügung:
iOS | Android | UWP |
---|---|---|
SetElementSize CreateFlyoutRenderer CreateNavBarAppearanceTracker CreatePageRendererTracker CreateShellFlyoutContentRenderer CreateShellItemRenderer CreateShellItemTransition CreateShellSearchResultsRenderer CreateShellSectionRenderer CreateTabBarAppearanceTracker Dispose OnCurrentItemChanged OnElementPropertyChanged OnElementSet UpdateBackgroundColor |
CreateFragmentForPage CreateShellFlyoutContentRenderer CreateShellFlyoutRenderer CreateShellItemRenderer CreateShellSectionRenderer CreateTrackerForToolbar CreateToolbarAppearanceTracker CreateTabLayoutAppearanceTracker CreateBottomNavViewAppearanceTracker OnElementPropertyChanged OnElementSet SwitchFragment Dispose |
CreateShellFlyoutTemplateSelector CreateShellHeaderRenderer CreateShellItemRenderer CreateShellSectionRenderer OnElementPropertyChanged OnElementSet UpdateFlyoutBackdropColor UpdateFlyoutBackgroundColor |
Die Klassen FlyoutItem
und TabBar
sind Aliase für die ShellItem
-Klasse, und die Tab
-Klasse ist ein Alias für die ShellSection
-Klasse. Aus diesem Grund sollte die CreateShellItemRenderer
-Methode beim Erstellen eines benutzerdefinierten Renderers für FlyoutItem
-Objekte die CreateShellSectionRenderer
-Methode beim Erstellen eines benutzerdefinierten Renderers für Tab
-Objekte überschrieben werden.
Wichtig
Es gibt zusätzliche Klassen für Shellrenderer, z. B. ShellSectionRenderer
und ShellItemRenderer
unter iOS, Android und UWP. Diese zusätzlichen Rendererklassen werden jedoch durch Überschreibungen in der Klasse ShellRenderer
erzeugt. Daher kann das Anpassen des Verhaltens dieser zusätzlichen Rendererklassen erreicht werden, indem sie in Unterklassen aufgeteilt werden und eine Instanz der Unterklasse in der entsprechenden Überschreibung in der in Unterklassen aufgeteilten ShellRenderer
-Klasse erzeugt wird.
iOS-Beispiel
Das folgende Codebeispiel zeigt ein in Unterklassen aufgeteiltes ShellRenderer
-Objekt für iOS, das ein Hintergrundbild für die Navigationsleiste der Shell-Anwendung festlegt:
using UIKit;
using Xamarin.Forms;
using Xamarin.Forms.Platform.iOS;
[assembly: ExportRenderer(typeof(Xaminals.AppShell), typeof(Xaminals.iOS.MyShellRenderer))]
namespace Xaminals.iOS
{
public class MyShellRenderer : ShellRenderer
{
protected override IShellSectionRenderer CreateShellSectionRenderer(ShellSection shellSection)
{
var renderer = base.CreateShellSectionRenderer(shellSection);
if (renderer != null)
{
(renderer as ShellSectionRenderer).NavigationBar.SetBackgroundImage(UIImage.FromFile("monkey.png"), UIBarMetrics.Default);
}
return renderer;
}
}
}
Die MyShellRenderer
-Klasse überschreibt die CreateShellSectionRenderer
-Methode und ruft den von der Basisklasse erzeugten Renderer ab. Anschließend wird der Renderer durch Festlegen eines Hintergrundbilds für die Navigationsleiste geändert, bevor der Renderer zurückgegeben wird.
Android-Beispiel
Das folgende Codebeispiel zeigt ein in Unterklassen aufgeteiltes ShellRenderer
-Objekt für Android, das ein Hintergrundbild für die Navigationsleiste der Shell-Anwendung festlegt:
using Android.Content;
using Xamarin.Forms;
using Xamarin.Forms.Platform.Android;
[assembly: ExportRenderer(typeof(Xaminals.AppShell), typeof(Xaminals.Droid.MyShellRenderer))]
namespace Xaminals.Droid
{
public class MyShellRenderer : ShellRenderer
{
public MyShellRenderer(Context context) : base(context)
{
}
protected override IShellToolbarAppearanceTracker CreateToolbarAppearanceTracker()
{
return new MyShellToolbarAppearanceTracker(this);
}
}
}
Die MyShellRenderer
-Klasse überschreibt die CreateToolbarAppearanceTracker
-Methode, und gibt eine Instanz der MyShellToolbarAppearanceTracker
-Klasse zurück. Im folgenden Beispiel wird die MyShellToolbarAppearanceTracker
-Klasse veranschaulicht, die von der ShellToolbarAppearanceTracker
-Klasse abgeleitet wird:
using AndroidX.AppCompat.Widget;
using Xamarin.Forms;
using Xamarin.Forms.Platform.Android;
namespace Xaminals.Droid
{
public class MyShellToolbarAppearanceTracker : ShellToolbarAppearanceTracker
{
public MyShellToolbarAppearanceTracker(IShellContext context) : base(context)
{
}
public override void SetAppearance(Toolbar toolbar, IShellToolbarTracker toolbarTracker, ShellAppearance appearance)
{
base.SetAppearance(toolbar, toolbarTracker, appearance);
toolbar.SetBackgroundResource(Resource.Drawable.monkey);
}
}
}
Die MyShellToolbarAppearanceTracker
-Klasse überschreibt die SetAppearance
-Methode und ändert die Symbolleiste, indem sie ein Hintergrundbild dafür festlegt.
Wichtig
Die ExportRendererAttribute
-Klasse muss nur einem benutzerdefinierten Renderer hinzugefügt werden, der von der ShellRenderer
-Klasse abgeleitet ist. Zusätzliche Shell-Rendererklassen mit Unterklassen werden von der in Unterklassen unterteilten ShellRenderer
-Klasse erstellt.