Bagikan melalui


Gunakan kembali efek di .NET MAUI

Meskipun ada banyak manfaat untuk menggunakan handler .NET Multi-platform App UI (.NET MAUI) untuk menyesuaikan kontrol, masih mungkin untuk menggunakan efek Xamarin.Forms di aplikasi .NET MAUI. Untuk informasi selengkapnya tentang efek, lihat efek Xamarin.Forms.

Proses untuk memigrasikan efek Xamarin.Forms ke .NET MAUI adalah dengan:

  1. Hapus atribut efek dari kelas efek Anda. Untuk informasi selengkapnya, lihat Menghapus atribut efek.
  2. Hapus direktif efek using . Untuk informasi selengkapnya, lihat Menghapus menggunakan direktif.
  3. Tambahkan kode efek ke lokasi yang sesuai di proyek aplikasi .NET MAUI Anda. Untuk informasi selengkapnya, lihat Menambahkan kode efek.
  4. Daftarkan efeknya. Untuk informasi selengkapnya, lihat Mendaftarkan efek.
  5. Gunakan efek .NET MAUI Anda. Untuk informasi selengkapnya, lihat Menggunakan efeknya.

Menghapus atribut efek

Setiap ResolutionGroupNameAttribute atribut dan ExportEffectAttribute harus dihapus dari kelas efek Anda.

Menghapus menggunakan direktif

Referensi apa pun ke Xamarin.Forms namespace layanan dan Xamarin.Forms.Platform.* harus dihapus dari kelas efek Anda.

Menambahkan kode efek

Jika Anda menggunakan proyek multi-target .NET MAUI, kode efek Anda harus digabungkan ke dalam satu file dan ditempatkan di luar folder Platform . Ini mengharuskan Anda untuk menggabungkan implementasi dan PlatformEffect implementasi Anda RoutingEffect ke dalam satu file, menggunakan kompilasi bersyarat di sekitar kode platform. Namun, jika solusi Anda memiliki proyek terpisah per platform, maka Anda harus memindahkan file efek khusus platform ke dalam proyek yang sesuai.

Di .NET MAUI, RoutingEffect kelas berada di Microsoft.Maui.Controls namespace layanan. Namespace ini adalah salah satu arahan implisit global using .NET MAUI, sehingga Anda tidak perlu menambahkan using direktif untuk itu. Namun, PlatformEffect kelas berada di Microsoft.Maui.Controls.Platform namespace layanan, yang harus Anda tambahkan using direktif.

Contoh kode berikut menunjukkan FocusRoutingEffect kelas dan implementasi platformnya yang digabungkan ke dalam satu 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

Mendaftarkan efek

Dalam proyek aplikasi .NET MAUI Anda, buka MauiProgram.cs dan panggil ConfigureEffects metode pada MauiAppBuilder objek dalam CreateMauiApp metode :

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

  return builder.Build();
}

Efeknya terdaftar dengan ConfigureEffects metode , yang configureDelegate mendaftarkan PlatformEffect implementasi terhadap implementasinya RoutingEffect .

Mengonsumsi efek

Efeknya dapat dikonsumsi dalam aplikasi .NET MAUI dengan menambahkannya ke Effects koleksi kontrol:

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