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:
- Rimuovere gli attributi dell'effetto dalle classi degli effetti. Per altre informazioni, vedere Rimuovere gli attributi degli effetti.
- Rimuovere le direttive dell'effetto
using
. Per altre informazioni, vedere Rimuovere le direttive using. - Aggiungere il codice dell'effetto nella posizione appropriata nel progetto di app MAUI .NET. Per altre informazioni, vedere Aggiungere il codice dell'effetto.
- Registrare l'effetto. Per altre informazioni, vedere Registrare l'effetto.
- 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>