.NET MAUI에서 효과 다시 사용

.NET 다중 플랫폼 앱 UI(.NET MAUI) 처리기를 사용하여 컨트롤을 사용자 지정하는 데는 많은 이점이 있지만 .NET MAUI 앱에서 Xamarin.Forms 효과를 사용할 수 있습니다. 효과에 대한 자세한 내용은 Xamarin.Forms 효과를 참조 하세요.

Xamarin.Forms 효과를 .NET MAUI로 마이그레이션하는 프로세스는 다음과 같습니다.

  1. 효과 클래스에서 효과 특성을 제거합니다. 자세한 내용은 효과 특성 제거를 참조 하세요.
  2. 효과 using 지시문을 제거합니다. 자세한 내용은 지시문을 사용하여 제거를 참조 하세요.
  3. .NET MAUI 앱 프로젝트의 적절한 위치에 효과 코드를 추가합니다. 자세한 내용은 효과 코드 추가를 참조 하세요.
  4. 효과를 등록합니다. 자세한 내용은 효과 등록을 참조하세요.
  5. .NET MAUI 효과를 사용합니다. 자세한 내용은 효과 소비를 참조하세요.

효과 특성 제거

효과 클래스에서 모든 ResolutionGroupNameAttribute 특성과 ExportEffectAttribute 특성을 제거해야 합니다.

using 지시문 제거

효과 클래스에서 Xamarin.Forms 해당 및 Xamarin.Forms.Platform.* 네임스페이스에 대한 모든 참조를 제거해야 합니다.

효과 코드 추가

.NET MAUI 다중 대상 프로젝트를 사용하는 경우 효과 코드를 단일 파일로 결합하고 Platforms 폴더 외부에 배치해야 합니다. 이렇게 하려면 플랫폼 코드에 대한 조건부 컴파일을 사용하여 구현과 PlatformEffect 구현을 단일 파일로 결합해야 합니다RoutingEffect. 그러나 솔루션에 플랫폼당 별도의 프로젝트가 있는 경우 플랫폼별 효과 파일을 해당 프로젝트로 이동해야 합니다.

.NET MAUI RoutingEffect 에서 클래스는 네임스페이스에 Microsoft.Maui.Controls 있습니다. 이 네임스페이스는 .NET MAUI의 암시적 global using 지시문 중 하나이므로 지시문을 추가할 using 필요가 없습니다. 그러나 클래스는 PlatformEffect 네임스페이 Microsoft.Maui.Controls.Platform 스에 있으므로 지시문을 추가 using 해야 합니다.

다음 코드 예제에서는 클래스와 단일 파일로 결합된 해당 플랫폼 구현을 보여 FocusRoutingEffect 줍니다.

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

효과 등록

.NET MAUI 앱 프로젝트에서 MauiProgram.cs를 열고 메서드의 MauiAppBuilderConfigureEffects 개체에서 메서드를 CreateMauiApp 호출합니다.

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

  return builder.Build();
}

효과는 구현에 대해 구현을 ConfigureEffects 등록하는 PlatformEffect 메서드 configureDelegateRoutingEffect 등록됩니다.

효과 사용

이 효과는 컨트롤 컬렉션에 추가하여 .NET MAUI 앱에서 Effects 사용할 수 있습니다.

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