Sdílet prostřednictvím


Opakované použití efektů v .NET MAUI

I když je používání obslužných rutin .NET MAUI (Multi-Platform App UI) .NET mnoho výhod, je stále možné v aplikacích .NET MAUI používat efekty Xamarin.Forms. Další informace o efektech najdete v tématu Efekty Xamarin.Forms.

Proces migrace efektu Xamarin.Forms na .NET MAUI je následující:

  1. Odeberte atributy efektu z tříd efektů. Další informace naleznete v tématu Odebrání atributů efektu.
  2. Odeberte direktivy efektu using . Další informace naleznete v tématu Remove using direktivy.
  3. Přidejte kód efektu do příslušného umístění v projektu aplikace .NET MAUI. Další informace najdete v tématu Přidání kódu efektu.
  4. Zaregistrujte účinek. Další informace naleznete v tématu Registrace efektu.
  5. Využití efektu .NET MAUI Další informace najdete v tématu Využití efektu.

Odebrání atributů efektu

Všechny ResolutionGroupNameAttribute a ExportEffectAttribute atributy by měly být odebrány z tříd efektů.

Odebrání direktiv using

Všechny odkazy na obory Xamarin.Forms názvů a Xamarin.Forms.Platform.* obory názvů by se měly z vašich tříd efektů odebrat.

Přidání kódu efektu

Pokud používáte multi-cílený projekt .NET MAUI, váš kód efektu by se měl zkombinovat do jednoho souboru a umístit mimo složku Platformy . To vyžaduje, abyste zkombinovat implementaci RoutingEffect a PlatformEffect implementace do jednoho souboru pomocí podmíněné kompilace kolem kódu platformy. Pokud ale vaše řešení obsahuje samostatné projekty pro každou platformu, měli byste přesunout soubory efektu specifické pro danou platformu do odpovídajících projektů.

V .NET MAUI RoutingEffect je třída v Microsoft.Maui.Controls oboru názvů. Tento obor názvů je jedním z implicitních global using direktiv .NET MAUI, takže pro něj nemusíte přidávat direktivu using . PlatformEffect Třída je však v Microsoft.Maui.Controls.Platform oboru názvů, pro který musíte přidat direktivuusing.

Následující příklad kódu ukazuje FocusRoutingEffect třídu a její implementace platformy zkombinované do jednoho souboru:

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

Registrace efektu

V projektu aplikace .NET MAUI otevřete MauiProgram.cs a volejte ConfigureEffects metodu objektu MauiAppBuilderCreateMauiApp v metodě:

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

  return builder.Build();
}

Účinek je registrován v ConfigureEffects metodě, jejíž configureDelegate zaregistruje implementaci PlatformEffect proti její RoutingEffect implementaci.

Využití efektu

Efekt lze použít v aplikaci .NET MAUI tak, že ho přidáte do Effects kolekce ovládacího prvku:

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