Sdílet prostřednictvím


Opakované použití vlastních rendererů v .NET MAUI

Projděte si ukázku. Procházení ukázky

I když je použití obslužných rutin .NET MAUI (Multi-Platform App UI) rozhraní .NET MAUI (.NET MAUI) k přizpůsobení a vytváření mnoha výhod, je stále možné používat vlastní renderery Xamarin.Forms v aplikacích .NET MAUI. Další informace o vlastních rendererech najdete v tématu Vlastní renderery Xamarin.Forms.

Šeděné vykreslovací moduly

.NET MAUI poskytuje šeděné renderery, které umožňují snadné opětovné použití vlastních rendererů Xamarin.Forms za předpokladu, že renderer je odvozen od , v iOSu a Androidu a TableViewRendererVisualElementRenderer. ShellRendererListViewRendererFrameRenderer

Proces migrace vlastního rendereru Xamarin.Forms, který je odvozen od FrameRenderer, ListViewRendererShellRenderer, TableViewRenderera VisualElementRenderer do rendereru .NET MAUI shimmed je:

  1. Přidejte vlastní kód rendereru do příslušného umístění v projektu .NET MAUI. Další informace najdete v tématu Přidání kódu.
  2. using Upravte direktivy a odeberte ExportRenderer atributy. Další informace naleznete v tématu Úpravy direktiv using a další kód.
  3. Zaregistrujte vykreslovací moduly. Další informace naleznete v tématu Registrace rendererů.
  4. Využití rendererů Další informace naleznete v tématu Využití vlastních rendererů.

Pokud chcete předvést použití vlastních rendererů v rozhraní .NET MAUI, zvažte ovládací prvek Xamarin.Forms s názvem PressableView. Tento ovládací prvek zveřejňuje Pressed a Released události na základě gest specifických pro platformu. Vlastní implementace rendereru se skládá ze 3 souborů:

  • PressableView.cs - multiplatformní třída, která rozšiřuje ContentView.
  • PressableViewRenderer.cs - implementace Androidu, která je odvozena od VisualElementRenderer.
  • PressableViewRenderer.cs - implementace iOSu, která je odvozena od VisualElementRenderer.

Poznámka:

Alternativou k použití vlastního rendereru Xamarin.Forms v .NET MAUI je migrace vlastního rendereru do obslužné rutiny .NET MAUI. Další informace najdete v tématu Migrace vlastního rendereru Xamarin.Forms do obslužné rutiny .NET MAUI.

Přidání kódu

Pokud používáte multi-cílený projekt .NET MAUI, můžete soubor pro různé platformy přesunout na libovolné místo mimo složku Platformy a soubory implementace specifické pro platformu by se měly přesunout do odpovídající složky Platformy :

Přesuňte soubory vykreslovacího modulu.

Pokud má vaše řešení samostatné projekty pro jednotlivé platformy, měli byste přesunout soubory implementace specifické pro danou platformu do odpovídajících projektů.

Úprava direktiv using a jiného kódu

Všechny odkazy na Xamarin.Forms.* obory názvů je potřeba odebrat a pak můžete vyřešit související typy na Microsoft.Maui.*. To musí nastat ve všech souborech, které jste přidali do projektů .NET MAUI.

Měli byste také odebrat všechny ExportRenderer atributy, protože nebudou potřeba v .NET MAUI. Například by se měly odebrat následující položky:

[assembly: ExportRenderer(typeof(PressableView), typeof(PressableViewRenderer))]

Registrace rendererů

Ovládací prvek pro různé platformy a jeho renderery musí být zaregistrované v aplikaci, aby bylo možné ho využívat. K tomu by mělo dojít v CreateMauiApp metodě ve MauiProgram třídě v projektu aplikace, což je vstupní bod aplikace pro různé platformy:

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();
    }
}

Vykreslovací moduly jsou registrovány pomocí ConfigureMauiHandlers metody a AddHandler metody. Tento první argument metody AddHandler je typ ovládacího prvku pro různé platformy, přičemž druhým argumentem je jeho typ rendereru.

Důležité

Pouze renderery, které jsou odvozeny od , v iOSu, ShellRenderer v iOSu a AndroiduTabbedRenderer, TableViewRenderera VisualElementRenderer lze je zaregistrovat pomocí AddHandler metody. NavigationRendererListViewRendererFrameRenderer

Využití vlastních rendererů

Vlastní renderer je možné využívat v aplikaci .NET MAUI jako vlastní ovládací prvek:

<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>