Freigeben über


Wiederverwenden von Effekten in .NET MAUI

Obwohl es viele Vorteile für die Verwendung von .NET Multi-Platform App UI (.NET MAUI)-Handlern zum Anpassen von Steuerelementen gibt, ist es dennoch möglich, Xamarin.Forms-Effekte in .NET MAUI-Apps zu verwenden. Weitere Informationen zu Effekten finden Sie unter Effekte.

Der Prozess für die Migration eines Xamarin.Forms-Effekts zu .NET MAUI lautet wie folgt:

  1. Entfernen Sie die Effektattribute aus Ihren Effektklassen. Weitere Informationen finden Sie unter Entfernen von Effektattributen.
  2. Entfernen Sie die Effektanweisungen using . Weitere Information finden Sie unter using-Anweisung entfernen.
  3. Fügen Sie den Effektcode an der entsprechenden Stelle in Ihrem .NET MAUI-App-Projekt ein. Weitere Informationen finden Sie unter Hinzufügen des Effektcodes.
  4. Registrieren des Effekts Weitere Informationen finden Sie unter Registrieren des Effekts.
  5. Nutzen Sie Ihren .NET MAUI-Effekt. Für weitere Informationen siehe Effekt verwenden.

Entfernen von Effektattributen

Alle ResolutionGroupNameAttribute- und ExportEffectAttribute-Attribute sollten aus Ihren Effektklassen entfernt werden.

using-Anweisungen entfernen

Alle Verweise auf die Namespaces Xamarin.Forms und Xamarin.Forms.Platform.* sollten aus Ihren Effektklassen entfernt werden.

Hinzufügen des Effektcodes

Wenn Sie ein .NET MAUI-Projekt mit mehreren Zielen verwenden, sollte Ihr Effektcode in einer einzigen Datei zusammengefasst und außerhalb des Ordners Plattformen abgelegt werden. Dies erfordert, dass Sie Ihre RoutingEffect-Implementierung und PlatformEffect-Implementierungen in einer einzigen Datei zusammenfassen und dabei die bedingte Kompilierung um den Plattformcode herum verwenden. Wenn Ihre Lösung jedoch über separate Projekte pro Plattform verfügt, sollten Sie die plattformspezifischen Effektdateien in die entsprechenden Projekte verschieben.

In .NET MAUI befindet sich die Klasse RoutingEffect im Namespace Microsoft.Maui.Controls. Dieser Namespace gehört zu den impliziten global using-Anweisungen von .NET MAUI, sodass Sie keine using-Anweisung für ihn hinzufügen müssen. Die PlatformEffect-Klasse befindet sich jedoch im Microsoft.Maui.Controls.Platform-Namespace, für den Sie eine using-Anweisung hinzufügen müssen.

Das folgende Codebeispiel zeigt eine FocusRoutingEffect-Klasse und ihre Plattformimplementierungen in einer einzelnen Datei:

using Microsoft.Maui.Controls.Platform;

namespace MyMauiApp.Effects;

internal class FocusRoutingEffect : RoutingEffect
{
}

#if ANDROID
internal class FocusPlatformEffect : PlatformEffect
{
    protected override void OnAttached()
    {
        // Customize the control here
    }

    protected override void OnDetached()
    {
        // Cleanup the control customization here
    }
}
#elif IOS
internal class FocusPlatformEffect : PlatformEffect
{
    protected override void OnAttached()
    {
        // Customize the control here
    }

    protected override void OnDetached()
    {
        // Cleanup the control customization here
    }
}
#elif WINDOWS
internal class FocusPlatformEffect : PlatformEffect
{
    protected override void OnAttached()
    {
        // Customize the control here
    }

    protected override void OnDetached()
    {
        // Cleanup the control customization here
    }
}
#endif

Registrieren Sie den Effekt

Öffnen Sie in Ihrem .NET-MAUI-App-Projekt die Datei MauiProgram.cs und rufen Sie die Methode ConfigureEffects für das Objekt MauiAppBuilder in der Methode CreateMauiApp auf:

public static MauiApp CreateMauiApp()
{
  var builder = MauiApp.CreateBuilder();
  builder
    .UseMauiApp<App>()
    .ConfigureEffects(effects =>
    {
      effects.Add<FocusRoutingEffect, FocusPlatformEffect>();
    });

  return builder.Build();
}

Der Effekt wird mit der Methode ConfigureEffects registriert, deren configureDelegate die PlatformEffect-Implementierung gegen ihre RoutingEffect-Implementierung registriert.

Nutzung des Effekts

Der Effekt kann in einer .NET MAUI-App verwendet werden, indem er der Effects-Sammlung eines Steuerelements hinzugefügt wird:

<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:local="clr-namespace:MyMauiApp.Effects"
             x:Class="MyMauiApp.MainPage">
    <VerticalStackLayout>
        <Entry Text="Enter your text">
            <Entry.Effects>
                <local:FocusRoutingEffect />
            </Entry.Effects>
        </Entry>
    </VerticalStackLayout>
</ContentPage>