Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Одним из преимуществ приложений оболочки Xamarin.Forms является то, что их внешний вид и поведение подробно настраиваются через свойства и методы, которые предоставляются в классах оболочки. Но вы можете создать собственный отрисовщик оболочки, если доступных возможностей расширенной настройки для конкретной платформы недостаточно. Пользовательский отрисовщик оболочки, как и в других системах, можно добавить только в один проект платформы, чтобы настроить для нее внешний вид и поведение, сохраняя поведение по умолчанию для другой платформы. Вы также можете добавить разные пользовательские отрисовщики оболочки в каждый проект платформы, чтобы раздельно настраивать внешний вид и поведение для iOS и Android.
Приложения оболочки отображаются в iOS и Android через класс ShellRenderer. В iOS этот класс ShellRenderer находится в пространстве имен Xamarin.Forms.Platform.iOS. В Android класс ShellRenderer находится в пространстве имен Xamarin.Forms.Platform.Android.
Процесс создания пользовательского отрисовщика оболочки выглядит следующим образом.
- Создайте подкласс класса
Shell. Обычно в приложении оболочки эта задача уже выполнена. - Используйте подкласс класса
Shell. Обычно в приложении оболочки эта задача уже выполнена. - Создайте на нужной платформе класс пользовательского отрисовщика, наследуемый от класса
ShellRenderer.
Создание класса пользовательского отрисовщика
Процесс создания класса пользовательского отрисовщика оболочки выглядит следующим образом.
- Создайте подкласс класса
ShellRenderer. - Переопределите методы для нужного изменения в поведении.
- Добавьте
ExportRendererAttributeв подклассShellRenderer, чтобы указать, что он будет использоваться для отрисовки приложения оболочки. Этот атрибут используется для регистрации пользовательского отрисовщика в Xamarin.Forms.
Примечание.
Предоставлять пользовательский отрисовщик оболочки в проекте для каждой платформы необязательно. Если пользовательский отрисовщик незарегистрирован, используется класс ShellRenderer по умолчанию.
Класс ShellRenderer предоставляет следующие переопределяемые методы.
| iOS | Android | UWP |
|---|---|---|
SetElementSizeCreateFlyoutRendererCreateNavBarAppearanceTrackerCreatePageRendererTrackerCreateShellFlyoutContentRendererCreateShellItemRendererCreateShellItemTransitionCreateShellSearchResultsRendererCreateShellSectionRendererCreateTabBarAppearanceTrackerDisposeOnCurrentItemChangedOnElementPropertyChangedOnElementSetUpdateBackgroundColor |
CreateFragmentForPageCreateShellFlyoutContentRendererCreateShellFlyoutRendererCreateShellItemRendererCreateShellSectionRendererCreateTrackerForToolbarCreateToolbarAppearanceTrackerCreateTabLayoutAppearanceTrackerCreateBottomNavViewAppearanceTrackerOnElementPropertyChangedOnElementSetSwitchFragmentDispose |
CreateShellFlyoutTemplateSelectorCreateShellHeaderRendererCreateShellItemRendererCreateShellSectionRendererOnElementPropertyChangedOnElementSetUpdateFlyoutBackdropColorUpdateFlyoutBackgroundColor |
Классы FlyoutItem и TabBar являются псевдонимами для класса ShellItem, а класс Tab — для класса ShellSection. Таким образом, методы CreateShellItemRenderer и CreateShellSectionRenderer должны быть переопределены при создании пользовательского отрисовщика для объектов FlyoutItem и Tab соответственно.
Внимание
Для iOS, Android и UWP существуют дополнительные классы отрисовщика оболочки, такие как ShellSectionRenderer и ShellItemRenderer. Но эти дополнительные классы отрисовщика создаются путем переопределения класса ShellRenderer. Это означает, что любое поведение этих дополнительных классов отрисовщика можно переопределить, создавая для них подклассы и экземпляры этого подкласса в соответствующем переопределении производного класса ShellRenderer.
Пример для iOS
Следующий пример кода демонстрирует производный класс ShellRenderer для iOS, который задает фоновое изображение для панели навигации приложения оболочки:
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;
}
}
}
Класс MyShellRenderer переопределяет метод CreateShellSectionRenderer и извлекает отрисовщик, созданный в базовом классе. Затем он изменяет отрисовщик, задавая фоновое изображение для панели навигации, и возвращает измененный отрисовщик.
Пример для Android
Следующий пример кода демонстрирует производный класс ShellRenderer для Android, который задает фоновое изображение для панели навигации приложения оболочки:
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);
}
}
}
Класс MyShellRenderer переопределяет метод CreateToolbarAppearanceTracker и возвращает экземпляр класса MyShellToolbarAppearanceTracker. Класс MyShellToolbarAppearanceTracker, который является производным от класса ShellToolbarAppearanceTracker, представлен в следующем примере:
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);
}
}
}
Класс MyShellToolbarAppearanceTracker переопределяет метод SetAppearance и изменяет панель инструментов, задавая для нее фоновое изображение.
Внимание
Вам достаточно лишь добавить ExportRendererAttribute в пользовательский отрисовщик, наследуемый от класса ShellRenderer. Дополнительные производные классы отрисовщика оболочки создаются в подклассе класса ShellRenderer.