Bagikan melalui


Perilaku

Browse sample. Telusuri sampel

Perilaku .NET Multi-platform App UI (.NET MAUI) memungkinkan Anda menambahkan fungsionalitas ke kontrol antarmuka pengguna tanpa harus mensubkelasnya. Sebaliknya, fungsionalitas diimplementasikan dalam kelas perilaku dan dilampirkan ke kontrol seolah-olah itu adalah bagian dari kontrol itu sendiri.

Perilaku memungkinkan Anda menerapkan kode yang biasanya harus Anda tulis sebagai kode-di belakang, karena langsung berinteraksi dengan API kontrol sedimikian rupa sehingga dapat dilampirkan secara ringkas ke kontrol dan dikemas untuk digunakan kembali di lebih dari satu aplikasi. Mereka dapat digunakan untuk menyediakan berbagai fungsionalitas untuk kontrol, seperti:

  • Menambahkan validator email ke Entry.
  • Membuat kontrol peringkat menggunakan pengenal gerakan ketuk.
  • Mengontrol animasi.

.NET MAUI mendukung tiga jenis perilaku yang berbeda:

  • Perilaku terlampir adalah static kelas dengan satu atau beberapa properti terlampir. Untuk informasi selengkapnya tentang perilaku terlampir, lihat Perilaku terlampir.
  • Perilaku MAUI .NET adalah kelas yang berasal dari Behavior kelas atau Behavior<T> , di mana T adalah jenis kontrol yang harus diterapkan perilaku. Untuk informasi selengkapnya, lihat Perilaku MAUI .NET.
  • Perilaku platform adalah kelas yang berasal dari PlatformBehavior<TView> kelas atau PlatformBehavior<TView,TPlatformView> . Perilaku ini dapat menanggapi kondisi dan peristiwa sewenang-wenang pada kontrol asli. Untuk informasi selengkapnya, lihat Perilaku platform.

Perilaku terlampir

Perilaku terlampir adalah kelas statis dengan satu atau beberapa properti terlampir. Properti terlampir adalah jenis properti khusus yang dapat diikat. Mereka didefinisikan dalam satu kelas tetapi dilampirkan ke objek lain, dan dapat dikenali dalam XAML sebagai atribut yang berisi kelas dan nama properti yang dipisahkan oleh titik. Untuk informasi selengkapnya tentang properti terlampir, lihat Properti terlampir.

Properti terlampir dapat menentukan propertyChanged delegasi yang akan dijalankan ketika nilai properti berubah, seperti ketika properti diatur pada kontrol. propertyChanged Saat delegasi dijalankan, delegasi meneruskan referensi ke kontrol tempat delegasi dilampirkan, dan parameter yang berisi nilai lama dan baru untuk properti . Delegasi ini dapat digunakan untuk menambahkan fungsionalitas baru ke kontrol tempat properti dilampirkan dengan memanipulasi referensi yang diteruskan, sebagai berikut:

  1. Delegasi propertyChanged mentransmisikan referensi kontrol, yang diterima sebagai BindableObject, ke jenis kontrol yang dirancang untuk meningkatkan perilaku.
  2. Delegasi propertyChanged memodifikasi properti kontrol, memanggil metode kontrol, atau mendaftarkan penanganan aktivitas untuk peristiwa yang diekspos oleh kontrol, untuk mengimplementasikan fungsionalitas perilaku inti.

Peringatan

Perilaku terlampir didefinisikan dalam static kelas, dengan static properti dan metode. Ini menyulitkan untuk membuat perilaku terlampir yang memiliki status.

Membuat perilaku terlampir

Perilaku terlampir dapat diimplementasikan dengan membuat kelas statis yang berisi properti terlampir yang menentukan propertyChanged delegasi.

Contoh berikut menunjukkan AttachedNumericValidationBehavior kelas , yang menyoroti nilai yang dimasukkan oleh pengguna ke dalam Entry kontrol berwarna merah jika bukan double:

public static class AttachedNumericValidationBehavior
{
    public static readonly BindableProperty AttachBehaviorProperty =
        BindableProperty.CreateAttached("AttachBehavior", typeof(bool), typeof(AttachedNumericValidationBehavior), false, propertyChanged: OnAttachBehaviorChanged);

    public static bool GetAttachBehavior(BindableObject view)
    {
        return (bool)view.GetValue(AttachBehaviorProperty);
    }

    public static void SetAttachBehavior(BindableObject view, bool value)
    {
        view.SetValue(AttachBehaviorProperty, value);
    }

    static void OnAttachBehaviorChanged(BindableObject view, object oldValue, object newValue)
    {
        Entry entry = view as Entry;
        if (entry == null)
        {
            return;
        }

        bool attachBehavior = (bool)newValue;
        if (attachBehavior)
        {
            entry.TextChanged += OnEntryTextChanged;
        }
        else
        {
            entry.TextChanged -= OnEntryTextChanged;
        }
    }

    static void OnEntryTextChanged(object sender, TextChangedEventArgs args)
    {
        double result;
        bool isValid = double.TryParse(args.NewTextValue, out result);
        ((Entry)sender).TextColor = isValid ? Colors.Black : Colors.Red;
    }
}

Dalam contoh ini, AttachedNumericValidationBehavior kelas berisi properti terlampir bernama AttachBehavior dengan getter static dan setter, yang mengontrol penambahan atau penghapusan perilaku ke kontrol yang akan dilampirkan. Properti terlampir ini mendaftarkan OnAttachBehaviorChanged metode yang akan dijalankan ketika nilai properti berubah. Metode ini mendaftarkan atau membatalkan pendaftaran penanganan aktivitas untuk TextChanged peristiwa, berdasarkan nilai AttachBehavior properti terlampir. Fungsionalitas inti perilaku disediakan oleh OnEntryTextChanged metode , yang mengurai nilai yang dimasukkan dalam Entry dan mengatur TextColor properti menjadi merah jika nilainya bukan .double

Mengonsumsi perilaku terlampir

Perilaku terlampir dapat dikonsumsi dengan mengatur properti terlampirnya pada kontrol target.

Contoh berikut menunjukkan penggunaan AttachedNumericValidationBehavior kelas pada dengan Entry menambahkan AttachBehavior properti terlampir ke Entry:


<ContentPage ...
             xmlns:local="clr-namespace:BehaviorsDemos">
    <Entry Placeholder="Enter a System.Double" local:AttachedNumericValidationBehavior.AttachBehavior="true" />
</ContentPage>

Yang setara Entry dalam C# ditunjukkan dalam contoh kode berikut:

Entry entry = new Entry { Placeholder = "Enter a System.Double" };
AttachedNumericValidationBehavior.SetAttachBehavior(entry, true);

Cuplikan layar berikut menunjukkan perilaku terlampir yang merespons input yang tidak valid:

Screenshot of attached behavior responding to invalid input

Catatan

Perilaku terlampir ditulis untuk jenis kontrol tertentu (atau superkelas yang dapat berlaku untuk banyak kontrol), dan perilaku tersebut hanya boleh ditambahkan ke kontrol yang kompatibel.

Menghapus perilaku terlampir

Kelas AttachedNumericValidationBehavior dapat dihapus dari kontrol dengan mengatur AttachBehavior properti terlampir ke false:

<Entry Placeholder="Enter a System.Double" local:AttachedNumericValidationBehavior.AttachBehavior="false" />

Pada runtime, OnAttachBehaviorChanged metode akan dijalankan ketika nilai AttachBehavior properti terlampir diatur ke false. Metode ini OnAttachBehaviorChanged kemudian akan membatalkan pendaftaran penanganan aktivitas untuk TextChanged peristiwa, memastikan bahwa perilaku tidak dijalankan saat Anda berinteraksi dengan kontrol.

Perilaku MAUI .NET

Perilaku MAUI .NET dibuat dengan berasal dari Behavior kelas atau Behavior<T> .

Proses untuk membuat perilaku MAUI .NET adalah sebagai berikut:

  1. Buat kelas yang mewarisi dari Behavior kelas atau Behavior<T> , di mana T adalah jenis kontrol yang harus diterapkan perilaku.
  2. Ambil alih OnAttachedTo metode untuk melakukan penyiapan yang diperlukan.
  3. Ambil alih OnDetachingFrom metode untuk melakukan pembersihan yang diperlukan.
  4. Terapkan fungsionalitas inti perilaku.

Ini menghasilkan struktur yang ditunjukkan dalam contoh berikut:

public class MyBehavior : Behavior<View>
{
    protected override void OnAttachedTo(View bindable)
    {
        base.OnAttachedTo(bindable);
        // Perform setup
    }

    protected override void OnDetachingFrom(View bindable)
    {
        base.OnDetachingFrom(bindable);
        // Perform clean up
    }

    // Behavior implementation
}

Metode OnAttachedTo ini dipanggil segera setelah perilaku dilampirkan ke kontrol. Metode ini menerima referensi ke kontrol yang dilampirkan, dan dapat digunakan untuk mendaftarkan penanganan aktivitas atau melakukan penyiapan lain yang diperlukan untuk mendukung fungsionalitas perilaku. Misalnya, Anda dapat berlangganan peristiwa pada kontrol. Fungsionalitas perilaku kemudian akan diimplementasikan di penanganan aktivitas untuk peristiwa tersebut.

Metode OnDetachingFrom ini dipanggil ketika perilaku dihapus dari kontrol. Metode ini menerima referensi ke kontrol yang dilampirkan, dan digunakan untuk melakukan pembersihan yang diperlukan. Misalnya, Anda dapat berhenti berlangganan dari peristiwa pada kontrol untuk mencegah kebocoran memori.

Perilaku kemudian dapat dikonsumsi dengan melampirkannya ke Behaviors koleksi kontrol.

Membuat Perilaku MAUI .NET

Perilaku MAUI .NET dapat diimplementasikan dengan membuat kelas yang berasal dari Behavior kelas atau Behavior<T> , dan mengambil alih OnAttachedTo metode dan OnDetachingFrom .

Contoh berikut menunjukkan NumericValidationBehavior kelas , yang menyoroti nilai yang dimasukkan oleh pengguna ke dalam Entry kontrol berwarna merah jika bukan double:

public class NumericValidationBehavior : Behavior<Entry>
{
    protected override void OnAttachedTo(Entry entry)
    {
        entry.TextChanged += OnEntryTextChanged;
        base.OnAttachedTo(entry);
    }

    protected override void OnDetachingFrom(Entry entry)
    {
        entry.TextChanged -= OnEntryTextChanged;
        base.OnDetachingFrom(entry);
    }

    void OnEntryTextChanged(object sender, TextChangedEventArgs args)
    {
        double result;
        bool isValid = double.TryParse(args.NewTextValue, out result);
        ((Entry)sender).TextColor = isValid ? Colors.Black : Colors.Red;
    }
}

Dalam contoh ini, NumericValidationBehavior kelas berasal dari Behavior<T> kelas , di mana T adalah Entry. Metode ini OnAttachedTo mendaftarkan penanganan aktivitas untuk TextChanged peristiwa, dengan OnDetachingFrom metode membatalkan pendaftaran TextChanged peristiwa untuk mencegah kebocoran memori. Fungsionalitas inti perilaku disediakan oleh OnEntryTextChanged metode , yang mengurai nilai yang dimasukkan dalam Entry dan mengatur TextColor properti menjadi merah jika nilainya bukan .double

Penting

.NET MAUI tidak mengatur BindingContext perilaku, karena perilaku dapat dibagikan dan diterapkan ke beberapa kontrol melalui gaya.

Mengonsumsi perilaku MAUI .NET

Setiap kontrol MAUI .NET memiliki Behaviors koleksi, di mana satu atau beberapa perilaku dapat ditambahkan:

<Entry Placeholder="Enter a System.Double">
    <Entry.Behaviors>
        <local:NumericValidationBehavior />
    </Entry.Behaviors>
</Entry>

Yang setara Entry dalam C# ditunjukkan dalam contoh kode berikut:

Entry entry = new Entry { Placeholder = "Enter a System.Double" };
entry.Behaviors.Add(new NumericValidationBehavior());

Cuplikan layar berikut menunjukkan perilaku MAUI .NET yang merespons input yang tidak valid:

Screenshot of .NET MAUI behavior responding to invalid input

Peringatan

Perilaku MAUI .NET ditulis untuk jenis kontrol tertentu (atau superkelas yang dapat berlaku untuk banyak kontrol), dan hanya boleh ditambahkan ke kontrol yang kompatibel. Mencoba melampirkan perilaku MAUI .NET ke kontrol yang tidak kompatibel akan mengakibatkan pengecualian dilemparkan.

Mengonsumsi perilaku MAUI .NET dengan gaya

Perilaku MAUI .NET dapat dikonsumsi dengan gaya eksplisit atau implisit. Namun, membuat gaya yang mengatur Behaviors properti kontrol tidak dimungkinkan karena properti bersifat baca-saja. Solusinya adalah menambahkan properti terlampir ke kelas perilaku yang mengontrol penambahan dan penghapusan perilaku. Prosesnya adalah sebagai berikut:

  1. Tambahkan properti terlampir ke kelas perilaku yang akan digunakan untuk mengontrol penambahan atau penghapusan perilaku ke kontrol tempat perilaku akan dilampirkan. Pastikan bahwa properti terlampir mendaftarkan propertyChanged delegasi yang akan dijalankan saat nilai properti berubah.
  2. Buat getter static dan setter untuk properti terlampir.
  3. Terapkan propertyChanged logika di delegasi untuk menambahkan dan menghapus perilaku.

Contoh berikut menunjukkan NumericValidationStyleBehavior kelas , yang memiliki properti terlampir yang mengontrol penambahan dan penghapusan perilaku:

public class NumericValidationStyleBehavior : Behavior<Entry>
{
    public static readonly BindableProperty AttachBehaviorProperty =
        BindableProperty.CreateAttached("AttachBehavior", typeof(bool), typeof(NumericValidationStyleBehavior), false, propertyChanged: OnAttachBehaviorChanged);

    public static bool GetAttachBehavior(BindableObject view)
    {
        return (bool)view.GetValue(AttachBehaviorProperty);
    }

    public static void SetAttachBehavior(BindableObject view, bool value)
    {
        view.SetValue(AttachBehaviorProperty, value);
    }

    static void OnAttachBehaviorChanged(BindableObject view, object oldValue, object newValue)
    {
        Entry entry = view as Entry;
        if (entry == null)
        {
            return;
        }

        bool attachBehavior = (bool)newValue;
        if (attachBehavior)
        {
            entry.Behaviors.Add(new NumericValidationStyleBehavior());
        }
        else
        {
            Behavior toRemove = entry.Behaviors.FirstOrDefault(b => b is NumericValidationStyleBehavior);
            if (toRemove != null)
            {
                entry.Behaviors.Remove(toRemove);
            }
        }
    }

    protected override void OnAttachedTo(Entry entry)
    {
        entry.TextChanged += OnEntryTextChanged;
        base.OnAttachedTo(entry);
    }

    protected override void OnDetachingFrom(Entry entry)
    {
        entry.TextChanged -= OnEntryTextChanged;
        base.OnDetachingFrom(entry);
    }

    void OnEntryTextChanged(object sender, TextChangedEventArgs args)
    {
        double result;
        bool isValid = double.TryParse(args.NewTextValue, out result);
        ((Entry)sender).TextColor = isValid ? Colors.Black : Colors.Red;
    }
}

Dalam contoh ini, NumericValidationStyleBehavior kelas berisi properti terlampir bernama AttachBehavior dengan getter static dan setter, yang mengontrol penambahan atau penghapusan perilaku ke kontrol yang akan dilampirkan. Properti terlampir ini mendaftarkan OnAttachBehaviorChanged metode yang akan dijalankan ketika nilai properti berubah. Metode ini menambahkan atau menghapus perilaku ke kontrol, berdasarkan nilai AttachBehavior properti terlampir.

Contoh kode berikut menunjukkan gaya eksplisit untuk NumericValidationStyleBehavior yang menggunakan AttachBehavior properti terlampir, dan yang dapat diterapkan ke Entry kontrol:

<Style x:Key="NumericValidationStyle" TargetType="Entry">
    <Style.Setters>
        <Setter Property="local:NumericValidationStyleBehavior.AttachBehavior" Value="true" />
    </Style.Setters>
</Style>

Style dapat diterapkan ke dengan Entry mengatur propertinya Style ke gaya menggunakan StaticResource ekstensi markup:

<Entry Placeholder="Enter a System.Double" Style="{StaticResource NumericValidationStyle}">

Untuk informasi selengkapnya tentang gaya, lihat Gaya.

Catatan

Meskipun Anda dapat menambahkan properti yang dapat diikat ke perilaku yang diatur atau dikueri di XAML, jika Anda membuat perilaku yang memiliki status, properti tersebut tidak boleh dibagi antara kontrol dalam Style dalam ResourceDictionary.

Menghapus perilaku MAUI .NET

Metode OnDetachingFrom ini dipanggil ketika perilaku dihapus dari kontrol, dan digunakan untuk melakukan pembersihan yang diperlukan seperti berhenti berlangganan dari peristiwa untuk mencegah kebocoran memori. Namun, perilaku tidak secara implisit dihapus dari kontrol kecuali koleksi kontrol Behaviors dimodifikasi oleh Remove metode atau Clear :

Behavior toRemove = entry.Behaviors.FirstOrDefault(b => b is NumericValidationStyleBehavior);
if (toRemove != null)
{
    entry.Behaviors.Remove(toRemove);
}

Atau, koleksi kontrol Behaviors dapat dibersihkan:

entry.Behaviors.Clear();

Catatan

Perilaku MAUI .NET tidak secara implisit dihapus dari kontrol ketika halaman muncul dari tumpukan navigasi. Sebaliknya, halaman harus dihapus secara eksplisit sebelum halaman keluar dari cakupan.

Perilaku platform

Perilaku platform dibuat dengan berasal dari PlatformBehavior<TView> kelas atau PlatformBehavior<TView,TPlatformView> . Mereka menanggapi kondisi dan peristiwa sewenang-wenang pada kontrol asli.

Perilaku platform dapat diimplementasikan melalui kompilasi kondisional, atau kelas parsial. Pendekatan yang diadopsi di sini adalah menggunakan kelas parsial, di mana perilaku platform biasanya terdiri dari kelas parsial lintas platform yang mendefinisikan API perilaku, dan kelas parsial asli yang mengimplementasikan perilaku pada setiap platform. Pada waktu build, multi-penargetan menggabungkan kelas parsial untuk membangun perilaku platform di setiap platform.

Proses untuk membuat perilaku platform adalah sebagai berikut:

  1. Buat kelas parsial lintas platform yang menentukan API untuk perilaku platform.

  2. Buat kelas parsial asli di setiap platform tempat aplikasi Anda dibangun, yang memiliki nama yang sama dengan kelas parsial lintas platform. Kelas parsial asli ini harus mewarisi dari PlatformBehavior<TView> kelas atau PlatformBehavior<TView,TPlatformView> , di mana TView adalah kontrol lintas platform yang harus diterapkan perilaku, dan TPlatformView merupakan tampilan asli yang mengimplementasikan kontrol lintas platform pada platform tertentu.

    Catatan

    Meskipun diperlukan untuk membuat kelas parsial asli di setiap platform tempat aplikasi Anda dibangun, tidak diharuskan untuk mengimplementasikan fungsionalitas perilaku platform di setiap platform. Misalnya, Anda dapat membuat perilaku platform yang memodifikasi ketebalan batas kontrol asli pada beberapa platform, tetapi tidak semua.

  3. Di setiap kelas parsial asli yang Anda perlukan untuk mengimplementasikan perilaku platform, Anda harus:

    1. Ambil alih OnAttachedTo metode untuk melakukan penyiapan apa pun.
    2. Ambil alih OnDetachedFrom metode untuk melakukan pembersihan apa pun.
    3. Terapkan fungsionalitas inti perilaku platform.

Perilaku kemudian dapat dikonsumsi dengan melampirkannya ke Behaviors koleksi kontrol.

Membuat perilaku platform

Untuk membuat perilaku platform, Anda harus terlebih dahulu membuat kelas parsial lintas platform yang menentukan API untuk perilaku platform:

namespace BehaviorsDemos
{
    public partial class TintColorBehavior
    {
        public static readonly BindableProperty TintColorProperty =
            BindableProperty.Create(nameof(TintColor), typeof(Color), typeof(TintColorBehavior));

        public Color TintColor
        {
            get => (Color)GetValue(TintColorProperty);
            set => SetValue(TintColorProperty, value);
        }
    }
}

Perilaku platform adalah kelas parsial yang implementasinya akan diselesaikan pada setiap platform yang diperlukan dengan kelas parsial tambahan yang menggunakan nama yang sama. Dalam contoh ini, TintColorBehavior kelas mendefinisikan satu properti yang dapat diikat, TintColor, yang akan mewarnai gambar dengan warna yang ditentukan.

Setelah membuat kelas parsial lintas platform, Anda harus membuat kelas parsial asli di setiap platform tempat Anda membuat aplikasi. Ini dapat dicapai dengan menambahkan kelas parsial ke folder anak yang diperlukan dari folder Platform :

Screenshot of the native partial classes for a platform behavior.

Atau Anda dapat mengonfigurasi proyek Anda untuk mendukung penargetan multi-nama file berbasis, atau multi-penargetan berbasis folder, atau keduanya. Untuk informasi selengkapnya tentang multi-penargetan, lihat Mengonfigurasi multi-penargetan.

Kelas parsial asli harus mewarisi dari PlatformBehavior<TView> kelas atau PlatformBehavior<TView,TPlatformView> kelas, di mana TView adalah kontrol lintas platform yang harus diterapkan perilaku, dan TPlatformView merupakan tampilan asli yang mengimplementasikan kontrol lintas platform pada platform tertentu. Di setiap kelas parsial asli yang Anda perlukan untuk menerapkan perilaku platform, Anda harus mengambil alih OnAttachedTo metode dan OnDetachedFrom metode , dan menerapkan fungsionalitas inti perilaku platform.

Metode OnAttachedTo ini dipanggil segera setelah perilaku platform melekat pada kontrol lintas platform. Metode ini menerima referensi ke kontrol lintas platform yang dilampirkan, dan secara opsional referensi ke kontrol asli yang mengimplementasikan kontrol lintas platform. Metode ini dapat digunakan untuk mendaftarkan penanganan aktivitas atau melakukan penyiapan lain yang diperlukan untuk mendukung fungsionalitas perilaku platform. Misalnya, Anda dapat berlangganan peristiwa pada kontrol. Fungsionalitas perilaku kemudian akan diimplementasikan di penanganan aktivitas untuk peristiwa tersebut.

Metode OnDetachedFrom ini dipanggil ketika perilaku dihapus dari kontrol lintas platform. Metode ini menerima referensi ke kontrol yang dilampirkan, dan secara opsional referensi ke kontrol asli yang mengimplementasikan kontrol lintas platform. Metode harus digunakan untuk melakukan pembersihan yang diperlukan. Misalnya, Anda dapat berhenti berlangganan dari peristiwa pada kontrol untuk mencegah kebocoran memori.

Penting

Kelas parsial harus berada di namespace yang sama dan menggunakan nama yang identik.

Contoh berikut menunjukkan TintColorBehavior kelas parsial untuk Android, yang mewarnai gambar dengan warna tertentu:

using Android.Graphics;
using Android.Widget;
using Microsoft.Maui.Platform;
using Color = Microsoft.Maui.Graphics.Color;

namespace BehaviorsDemos
{
    public partial class TintColorBehavior : PlatformBehavior<Image, ImageView>
    {
        protected override void OnAttachedTo(Image bindable, ImageView platformView)
        {
            base.OnAttachedTo(bindable, platformView);

            if (bindable is null)
                return;
            if (TintColor is null)
                ClearColor(platformView);
            else
                ApplyColor(platformView, TintColor);
        }

        protected override void OnDetachedFrom(Image bindable, ImageView platformView)
        {
            base.OnDetachedFrom(bindable, platformView);

            if (bindable is null)
                return;
            ClearColor(platformView);
        }

        void ApplyColor(ImageView imageView, Color color)
        {
            imageView.SetColorFilter(new PorterDuffColorFilter(color.ToPlatform(), PorterDuff.Mode.SrcIn ?? throw new NullReferenceException()));
        }

        void ClearColor(ImageView imageView)
        {
            imageView.ClearColorFilter();
        }
    }
}

Dalam contoh ini, TintColorBehavior kelas berasal dari PlatformBehavior<TView,TPlatformView> kelas , di mana TView adalah Image dan TPlatformView adalah ImageView. menerapkan OnAttachedTo warna warna ke gambar, asalkan TintColor properti memiliki nilai. Metode OnDetachedFrom ini menghapus warna warna dari gambar.

Kelas parsial asli harus ditambahkan di setiap platform tempat Anda membuat aplikasi. Namun, Anda dapat membuat KELAS parsial asli NO-OP, jika perilaku platform tidak diperlukan pada platform tertentu. Hal ini dapat dicapai dengan menyediakan kelas kosong:

using Microsoft.UI.Xaml;

namespace BehaviorsDemos
{
    public partial class TintColorBehavior : PlatformBehavior<Image, FrameworkElement>
    {
        // NO-OP on Windows
    }
}

Penting

.NET MAUI tidak mengatur BindingContext perilaku platform.

Mengonsumsi perilaku platform

Setiap kontrol MAUI .NET memiliki Behaviors koleksi, di mana satu atau beberapa perilaku platform dapat ditambahkan:

<Image Source="dotnet_bot.png"
       HeightRequest="200"
       HorizontalOptions="Center">
    <Image.Behaviors>
        <local:TintColorBehavior TintColor="Red" />
    </Image.Behaviors>
</Image>

Yang setara Image dalam C# ditunjukkan dalam contoh berikut:

Image image = new Image { Source = "dotnet_bot.png", HeightRequest = 200, HorizontalOptions = LayoutOptions.Center };
image.Behaviors.Add(new TintColorBehavior());

Cuplikan layar berikut menunjukkan perilaku platform yang memasang gambar:

Screenshot of .NET MAUI platform behavior tinting an image.

Peringatan

Perilaku platform ditulis untuk jenis kontrol tertentu (atau superkelas yang dapat berlaku untuk banyak kontrol), dan hanya boleh ditambahkan ke kontrol yang kompatibel. Mencoba melampirkan perilaku platform ke kontrol yang tidak kompatibel akan mengakibatkan pengecualian dilemparkan.