Condividi tramite


Riutilizzare gli effetti in .NET MAUI

Anche se esistono molti vantaggi per l'uso di gestori dell'interfaccia utente di app multipiattaforma .NET (.NET MAUI) per personalizzare i controlli, è comunque possibile usare effetti Xamarin.Forms nelle app MAUI .NET. Per altre informazioni sugli effetti, vedere Effetti di Xamarin.Forms.

Il processo di migrazione di un effetto Xamarin.Forms a .NET MAUI consiste nel:

  1. Rimuovere gli attributi dell'effetto dalle classi degli effetti. Per altre informazioni, vedere Rimuovere gli attributi degli effetti.
  2. Rimuovere le direttive dell'effetto using . Per altre informazioni, vedere Rimuovere le direttive using.
  3. Aggiungere il codice dell'effetto nella posizione appropriata nel progetto di app MAUI .NET. Per altre informazioni, vedere Aggiungere il codice dell'effetto.
  4. Registrare l'effetto. Per altre informazioni, vedere Registrare l'effetto.
  5. Utilizzare l'effetto MAUI .NET. Per altre informazioni, vedere Utilizzare l'effetto.

Rimuovere gli attributi dell'effetto

Gli ResolutionGroupNameAttribute attributi e ExportEffectAttribute devono essere rimossi dalle classi degli effetti.

Rimuovere le direttive using

Tutti i riferimenti agli Xamarin.Forms spazi dei nomi e Xamarin.Forms.Platform.* devono essere rimossi dalle classi degli effetti.

Aggiungere il codice dell'effetto

Se si usa un progetto con più destinazioni MAUI .NET, il codice dell'effetto deve essere combinato in un singolo file e posizionato all'esterno della cartella Platforms . Ciò richiede di combinare RoutingEffect l'implementazione e PlatformEffect le implementazioni in un singolo file, usando la compilazione condizionale per il codice della piattaforma. Tuttavia, se la soluzione include progetti separati per ogni piattaforma, è necessario spostare i file di effetto specifici della piattaforma nei progetti corrispondenti.

In .NET MAUI la RoutingEffect classe si trova nello spazio dei Microsoft.Maui.Controls nomi . Questo spazio dei nomi è una delle direttive implicite global using di .NET MAUI e quindi non è necessario aggiungere una using direttiva. Tuttavia, la PlatformEffect classe si trova nello spazio dei Microsoft.Maui.Controls.Platform nomi, per cui è necessario aggiungere una using direttiva.

L'esempio di codice seguente mostra una FocusRoutingEffect classe e le relative implementazioni della piattaforma combinate in un singolo file:

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

Registrare l'effetto

Nel progetto di app .NET MAUI aprire MauiProgram.cs e chiamare il ConfigureEffects metodo sull'oggetto MauiAppBuilder nel CreateMauiApp metodo :

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

  return builder.Build();
}

L'effetto viene registrato con il ConfigureEffects metodo , di cui configureDelegate registra l'implementazione rispetto RoutingEffect all'implementazionePlatformEffect.

Utilizzare l'effetto

L'effetto può essere utilizzato in un'app MAUI .NET aggiungendolo alla Effects raccolta di un controllo:

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