Ketik Pengonversi dan Ekstensi Markup untuk XAML

Pengonversi jenis dan ekstensi markup adalah dua teknik yang digunakan sistem jenis XAML dan penulis XAML untuk menghasilkan komponen grafik objek. Meskipun mereka berbagi beberapa karakteristik, pengonversi jenis dan ekstensi markup diwakili secara berbeda dalam aliran simpul XAML. Dalam kumpulan dokumentasi ini, jenis pengonversi, ekstensi markup, dan konstruksi serupa terkadang secara kolektif disebut sebagai pengonversi nilai.

Pengonversi Nilai

Di XAML, pengonversi nilai digunakan untuk berbagai skenario. Daftar berikut ini memperlihatkan berbagai jenis pengonversi nilai di XAML:

  • Ketik pengonversi

  • Ekstensi markup

  • Serializer nilai

  • Kelas terkait atau kelas dukungan yang menyediakan logika untuk sintaks teks XAML

Ketik Pengonversi

Dalam definisi Layanan XAML .NET, pengonversi jenis adalah kelas yang berasal dari kelas CLR TypeConverter . TypeConverter adalah kelas yang berada di .NET sebelum XAML ada. Tujuan aslinya adalah untuk mendukung jendela properti dan metafora pengeditan berbasis teks serupa untuk properti IDE. Pengenalan XAML ke .NET menggunakan TypeConverter untuk mengonversi sintaks teks (seperti yang ditemukan dalam nilai atribut atau simpul nilai XAML) menjadi objek. TypeConverter juga dapat digunakan untuk menserialisasikan nilai objek ke sintaks teks. TypeConverter juga digunakan dalam implementasi XAML khusus kerangka kerja sebelumnya di Windows Presentation Foundation (WPF) dan Windows Communication Foundation (WCF). Untuk informasi selengkapnya tentang TypeConverter di XAML, lihat Tipe Pengonversi untuk Gambaran Umum XAML.

Ekstensi Markup

Dalam implementasi Layanan XAML .NET, ekstensi markup adalah kelas yang berasal dari MarkupExtension kelas . Ekstensi markup adalah konsep yang dalam formulir ini berasal dari bahasa XAML. Anda dapat menganggap ekstensi markup sebagai sesuatu seperti urutan escape yang dapat diperluas yang memanggil ke kelas layanan untuk memberikan logikanya. Dalam hal markup, prosesor XAML secara universal mengenali ekstensi markup dengan urutan teks yang dimulai dengan kurung kurawal pembuka ({) dalam string teks.

Ekstensi markup berbeda dari pengonversi jenis. Pengonversi jenis biasanya dikaitkan dengan jenis atau anggota. Mereka dipanggil ketika pembuatan grafik objek atau serialisasi menemukan sintaks teks yang terkait dengan entitas tersebut.

Ekstensi markup dikaitkan dengan satu kelas layanan pendukung, tetapi dapat diterapkan untuk nilai anggota apa pun. (Namun, Anda dapat menerapkan ekstensi markup untuk dengan sengaja membatasi penggunaannya ke anggota atau jenis tujuan tertentu, dengan menggunakan konteks layanan.) Ekstensi markup dapat mengambil alih asosiasi pengonversi jenis. Atau Anda dapat menggunakannya untuk menentukan nilai atribut untuk anggota yang tidak akan mendukung sintaks teks.

Untuk informasi selengkapnya tentang pola implementasi ekstensi markup untuk XAML, lihat Ekstensi Markup untuk Gambaran Umum XAML.

Serializer Nilai

ValueSerializer adalah pengonversi jenis khusus yang dioptimalkan untuk mengonversi objek menjadi string. A ValueSerializer untuk XAML mungkin tidak menerapkan metode sama ConvertFrom sekali. Implementasi ValueSerializer memperoleh layanan dengan cara yang seperti TypeConverter implementasi. Metode virtual menyediakan parameter input context . Parameternya context berjenis IValueSerializerContext, yang mewarisi dari IServiceProvider antarmuka dan memiliki GetService metode .

Dalam sistem jenis XAML dan untuk implementasi penulis XAML yang menggunakan pemrosesan perulangan simpul XAML untuk serialisasi, pengonversi nilai yang terkait dengan jenis atau anggota dilaporkan oleh propertinya sendiri XamlType.ValueSerializer . Arti bagi penulis XAML yang melakukan serialisasi adalah bahwa jika a XamlType.TypeConverter dan XamlType.ValueSerializer ada, pengonversi jenis harus digunakan untuk jalur beban dan serializer nilai harus digunakan untuk jalur penyimpanan. Jika XamlType.TypeConverter ada tetapi XamlType.ValueSerializer adalah null, jenis pengonversi juga digunakan untuk jalur penyimpanan.

Pengonversi Nilai Lainnya

Pengonversi nilai dapat diperluas di luar pola tertentu dari pengonversi jenis atau ekstensi markup. Namun, penyesuaian ini juga akan memerlukan pendefinisian ulang sistem jenis XAML seperti yang disediakan oleh Layanan XAML .NET. Sistem jenis XAML yang ada memiliki representasi dan sistem pelaporan untuk pengonversi jenis, ekstensi markup, dan serializer nilai, tetapi tidak untuk bentuk konversi nilai kustom. Jika Anda ingin membuat pengonversi nilai kustom, gunakan jenisnya XamlValueConverter<TConverterBase> .

Ketik Konverter dan Ekstensi Markup dalam Kombinasi

Ekstensi markup dan pengonversi jenis digunakan untuk situasi yang berbeda di XAML. Meskipun konteks tersedia untuk penggunaan ekstensi markup, perilaku konversi jenis properti di mana ekstensi markup menyediakan nilai umumnya tidak diperiksa dalam implementasi ekstensi markup. Dengan kata lain, bahkan jika ekstensi markup mengembalikan string teks sebagai outputnya ProvideValue , perilaku konversi jenis pada string tersebut sebagaimana diterapkan ke properti tertentu atau jenis nilai properti tidak dipanggil. Umumnya, tujuan ekstensi markup adalah untuk memproses string dan mengembalikan objek tanpa konverter jenis apa pun yang terlibat.

Konteks Layanan untuk Pengonversi Nilai

Saat Anda menerapkan pengonversi nilai, Anda sering memerlukan akses ke konteks tempat pengonversi nilai diterapkan. Konteks ini dikenal sebagai konteks layanan. Konteks layanan mungkin mencakup informasi seperti konteks skema XAML aktif, akses ke sistem pemetaan jenis yang disediakan konteks skema XAML dan penulis objek XAML, dan sebagainya. Untuk informasi selengkapnya tentang konteks layanan yang tersedia untuk pengonversi nilai dan cara mengakses layanan yang mungkin disediakan konteks layanan, lihat Konteks Layanan yang Tersedia untuk Jenis Pengonversi dan Ekstensi Markup.

Baca juga