Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Одним из преимуществ приложений оболочки 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.