Udostępnij za pośrednictwem


Ponowne używanie efektów w programie .NET MAUI

Chociaż istnieje wiele korzyści związanych z używaniem programów obsługi interfejsu użytkownika aplikacji wieloplatformowych platformy .NET (.NET MAUI) w celu dostosowywania kontrolek, nadal można używać efektów platformy Xamarin.Forms w aplikacjach .NET MAUI. Aby uzyskać więcej informacji na temat efektów, zobacz Efekty platformy Xamarin.Forms.

Proces migracji efektu zestawu narzędzi Xamarin.Forms do platformy .NET MAUI to:

  1. Usuń atrybuty efektu z klas efektów. Aby uzyskać więcej informacji, zobacz Usuwanie atrybutów efektu.
  2. Usuń dyrektywy efektu using . Aby uzyskać więcej informacji, zobacz Usuwanie dyrektyw using.
  3. Dodaj kod efektu do odpowiedniej lokalizacji w projekcie aplikacji .NET MAUI. Aby uzyskać więcej informacji, zobacz Dodawanie kodu efektu.
  4. Zarejestruj efekt. Aby uzyskać więcej informacji, zobacz Rejestrowanie efektu.
  5. Korzystanie z efektu MAUI platformy .NET. Aby uzyskać więcej informacji, zobacz Korzystanie z efektu.

Usuń atrybuty efektu

Wszystkie ResolutionGroupNameAttribute atrybuty i ExportEffectAttribute powinny zostać usunięte z klas efektów.

Usuwanie dyrektyw using

Wszystkie odwołania do Xamarin.Forms przestrzeni nazw i Xamarin.Forms.Platform.* powinny zostać usunięte z klas efektów.

Dodawanie kodu efektu

Jeśli używasz wielokierunkowego projektu .NET MAUI, kod efektu powinien zostać połączony w jeden plik i umieszczony poza folderem Platformy . Wymaga to połączenia RoutingEffect implementacji i PlatformEffect implementacji w jeden plik przy użyciu kompilacji warunkowej wokół kodu platformy. Jeśli jednak twoje rozwiązanie ma oddzielne projekty na platformę, należy przenieść pliki efektu specyficznego dla platformy do odpowiednich projektów.

W programie .NET MAUI RoutingEffect klasa znajduje się w Microsoft.Maui.Controls przestrzeni nazw. Ta przestrzeń nazw jest jedną z niejawnych global using dyrektyw .NET MAUI, dlatego nie trzeba dodawać using do niej dyrektywy. PlatformEffect Jednak klasa znajduje się w Microsoft.Maui.Controls.Platform przestrzeni nazw, dla której należy dodać dyrektywęusing.

Poniższy przykład kodu przedstawia klasę FocusRoutingEffect i jej implementacje platformy połączone w jeden plik:

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

Rejestrowanie efektu

W projekcie aplikacji .NET MAUI otwórz MauiProgram.cs i wywołaj metodę ConfigureEffects w MauiAppBuilder obiekcie w metodzie CreateMauiApp :

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

  return builder.Build();
}

Efekt jest zarejestrowany w metodzie ConfigureEffects , której configureDelegate rejestruje implementację PlatformEffect względem jej RoutingEffect implementacji.

Korzystanie z efektu

Efekt można użyć w aplikacji .NET MAUI, dodając go do Effects kolekcji kontrolki:

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