Повторное использование пользовательских отрисовщиков в .NET MAUI
Хотя существует множество преимуществ для использования обработчиков многоплатформенного пользовательского интерфейса приложений .NET (.NET MAUI) для настройки и создания элементов управления, можно по-прежнему использовать пользовательские отрисовщики Xamarin.Forms в приложениях .NET MAUI. Дополнительные сведения о пользовательских отрисовщиках см. в разделе Xamarin.Forms с пользовательскими отрисовщиками.
Отрисовщики shimmed
.NET MAUI предоставляет отрисовщики, обеспечивающие простое повторное использование пользовательских отрисовщиков Xamarin.Forms, при условии, что средство отрисовки является производным от FrameRenderer
, ListViewRenderer
ShellRenderer
на iOS и Android, TableViewRenderer
и VisualElementRenderer
.
Процесс переноса пользовательского отрисовщика Xamarin.Forms, наследуемого от FrameRenderer
, ListViewRenderer
, TableViewRenderer
ShellRenderer
и VisualElementRenderer
в средство отрисовки .NET MAUI shimmed заключается в следующих целях:
- Добавьте пользовательский код отрисовщика в соответствующее расположение в проекте .NET MAUI. Дополнительные сведения см. в разделе "Добавление кода".
- Измените
using
директивы и удалитеExportRenderer
атрибуты. Дополнительные сведения см. в разделе "Изменение директив с помощью" и другого кода. - Зарегистрируйте отрисовщики. Дополнительные сведения см. в разделе "Регистрация отрисовщиков".
- Потребляйте отрисовщики. Дополнительные сведения см. в разделе "Использование настраиваемых отрисовщиков".
Чтобы продемонстрировать использование пользовательских отрисовщиков в .NET MAUI, рассмотрите элемент управления Xamarin.Forms с именем PressableView
. Этот элемент управления предоставляет Pressed
и Released
события на основе жестов для конкретной платформы. Реализация пользовательского отрисовщика состоит из 3 файлов:
PressableView.cs
— кроссплатформенный класс, расширяющийсяContentView
.PressableViewRenderer.cs
— реализация Android, которая является производным отVisualElementRenderer
.PressableViewRenderer.cs
— реализация iOS, которая является производным отVisualElementRenderer
.
Примечание.
Альтернативой использованию пользовательского отрисовщика Xamarin.Forms в .NET MAUI является перенос пользовательского отрисовщика в обработчик .NET MAUI. Дополнительные сведения см. в разделе "Перенос пользовательского отрисовщика Xamarin.Forms" в обработчик .NET MAUI.
Добавление кода
Если вы используете многоцелевой проект .NET MAUI, кроссплатформенный файл можно переместить в любое место за пределами папки "Платформы" , а файлы реализации для конкретной платформы должны быть перемещены в соответствующую папку Platform :
Если решение имеет отдельные проекты на платформу, то следует переместить файлы реализации для конкретной платформы в соответствующие проекты.
Изменение директив using и другого кода
Любая ссылка на Xamarin.Forms.*
пространства имен должна быть удалена, а затем можно разрешить связанные типы Microsoft.Maui.*
. Это должно произойти во всех файлах, добавленных в проект .NET MAUI.
Вы также должны удалить любые ExportRenderer
атрибуты, так как они не потребуются в .NET MAUI. Например, следует удалить следующее:
[assembly: ExportRenderer(typeof(PressableView), typeof(PressableViewRenderer))]
Регистрация отрисовщиков
Кроссплатформенный элемент управления и его отрисовщики должны быть зарегистрированы в приложении, прежде чем его можно будет использовать. Это должно произойти в CreateMauiApp
MauiProgram
классе в проекте приложения, который является кроссплатформенной точкой входа для приложения:
public static class MauiProgram
{
public static MauiApp CreateMauiApp()
{
var builder = MauiApp.CreateBuilder();
builder
.UseMauiApp<App>()
.ConfigureFonts(fonts =>
{
fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular");
fonts.AddFont("OpenSans-Semibold.ttf", "OpenSansSemibold");
})
.ConfigureMauiHandlers((handlers) =>
{
#if ANDROID
handlers.AddHandler(typeof(PressableView), typeof(XamarinCustomRenderer.Droid.Renderers.PressableViewRenderer));
#elif IOS
handlers.AddHandler(typeof(PressableView), typeof(XamarinCustomRenderer.iOS.Renderers.PressableViewRenderer));
#endif
});
return builder.Build();
}
}
Отрисовщики регистрируются в и AddHandler методеConfigureMauiHandlers. Первый аргумент метода AddHandler — это кроссплатформенный тип элемента управления, а второй аргумент — его тип отрисовщика.
Внимание
Только отрисовщики, производные от FrameRenderer
, NavigationRenderer
ListViewRenderer
в iOS, ShellRenderer
в iOS и Android, TabbedRenderer
в iOS, TableViewRenderer
и VisualElementRenderer
могут быть зарегистрированы с AddHandler помощью метода.
Использование пользовательских отрисовщиков
Пользовательский отрисовщик можно использовать в приложении .NET MAUI в качестве пользовательского элемента управления:
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:controls="clr-namespace:XamarinCustomRenderer.Controls"
x:Class="MauiCustomRenderer.MainPage">
<Grid BackgroundColor="#f1f1f1">
<controls:PressableView Pressed="Handle_Pressed"
Released="Handle_Released"
HorizontalOptions="Center"
VerticalOptions="Center">
<Grid BackgroundColor="#202020"
HorizontalOptions="Center"
VerticalOptions="Center">
<Label Text="Press Me"
FontSize="16"
TextColor="White"
Margin="24,20"
HorizontalTextAlignment="Center" />
</Grid>
</controls:PressableView>
</Grid>
</ContentPage>