Поделиться через


Повторное использование пользовательских отрисовщиков в .NET MAUI

Просмотрите пример. Обзор примера

Хотя существует множество преимуществ для использования обработчиков многоплатформенного пользовательского интерфейса приложений .NET (.NET MAUI) для настройки и создания элементов управления, можно по-прежнему использовать пользовательские отрисовщики Xamarin.Forms в приложениях .NET MAUI. Дополнительные сведения о пользовательских отрисовщиках см. в разделе Xamarin.Forms с пользовательскими отрисовщиками.

Отрисовщики shimmed

.NET MAUI предоставляет отрисовщики, обеспечивающие простое повторное использование пользовательских отрисовщиков Xamarin.Forms, при условии, что средство отрисовки является производным от FrameRenderer, ListViewRendererShellRenderer на iOS и Android, TableViewRendererи VisualElementRenderer.

Процесс переноса пользовательского отрисовщика Xamarin.Forms, наследуемого от FrameRenderer, ListViewRenderer, TableViewRendererShellRendererи VisualElementRenderer в средство отрисовки .NET MAUI shimmed заключается в следующих целях:

  1. Добавьте пользовательский код отрисовщика в соответствующее расположение в проекте .NET MAUI. Дополнительные сведения см. в разделе "Добавление кода".
  2. Измените using директивы и удалите ExportRenderer атрибуты. Дополнительные сведения см. в разделе "Изменение директив с помощью" и другого кода.
  3. Зарегистрируйте отрисовщики. Дополнительные сведения см. в разделе "Регистрация отрисовщиков".
  4. Потребляйте отрисовщики. Дополнительные сведения см. в разделе "Использование настраиваемых отрисовщиков".

Чтобы продемонстрировать использование пользовательских отрисовщиков в .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))]

Регистрация отрисовщиков

Кроссплатформенный элемент управления и его отрисовщики должны быть зарегистрированы в приложении, прежде чем его можно будет использовать. Это должно произойти в CreateMauiAppMauiProgram классе в проекте приложения, который является кроссплатформенной точкой входа для приложения:

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, NavigationRendererListViewRendererв 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>