Bagikan melalui


Generik dalam XAML

Layanan XAML .NET seperti yang diimplementasikan dalam System.Xaml menyediakan dukungan untuk menggunakan jenis CLR generik. Dukungan ini termasuk menentukan batasan generik sebagai argumen jenis dan memberlakukan batasan dengan memanggil metode yang sesuai Add untuk kasus pengumpulan generik. Topik ini menjelaskan aspek penggunaan dan referensi jenis generik di XAML.

x:TypeArguments

x:TypeArguments adalah direktif yang ditentukan oleh bahasa XAML. Ketika digunakan sebagai anggota jenis XAML yang didukung oleh jenis generik, x:TypeArguments meneruskan argumen jenis pembatasan generik ke konstruktor cadangan. Untuk sintaks referensi yang berkaitan dengan penggunaan Layanan XAML .NET dari x:TypeArguments, yang mencakup contoh sintaks, lihat x:TypeArguments Directive.

Karena x:TypeArguments mengambil string, dan memiliki backing pengonversi jenis, biasanya dinyatakan dalam penggunaan XAML sebagai atribut.

Dalam aliran simpul XAML, informasi yang dideklarasikan oleh x:TypeArguments dapat diperoleh dari XamlType.TypeArguments pada StartObject posisi dalam aliran simpul. Nilai XamlType.TypeArguments yang dikembalikan adalah daftar XamlType nilai. Penentuan apakah jenis XAML mewakili jenis generik dapat dilakukan dengan memanggil XamlType.IsGeneric.

Aturan dan Konvensi Sintaksis untuk Generik di XAML

Di XAML, jenis generik harus selalu direpresentasikan sebagai generik yang dibatasi. Generik yang tidak dibatasi tidak pernah ada dalam sistem jenis XAML atau aliran simpul XAML dan tidak dapat diwakili dalam markup XAML. Generik dapat direferensikan dalam sintaks atribut XAML untuk kasus di mana itu adalah batasan jenis berlapis dari generik yang direferensikan oleh x:TypeArguments, atau untuk kasus di mana x:Type menyediakan referensi jenis CLR untuk jenis generik. Mereferensikan generik didukung melalui kelas yang XamlTypeTypeConverter ditentukan oleh Layanan XAML .NET.

Formulir sintaks atribut XAML yang diaktifkan dengan XamlTypeTypeConverter mengubah konvensi sintaks MSIL / CLR khas yang menggunakan tanda kurung sudut untuk jenis dan batasan generik, dan sebagai gantinya mengganti tanda kurung untuk kontainer batasan. Misalnya, lihat x:TypeArguments Directive.

Fitur Generik dan XAML 2009

Jika Anda menggunakan XAML 2009 alih-alih memetakan jenis dasar CLR untuk mendapatkan jenis XAML untuk primitif bahasa umum, Anda dapat menggunakan jenis bawaan XAML 2009 sebagai item informasi di x:TypeArguments. Misalnya, Anda dapat mendeklarasikan hal berikut (pemetaan awalan tidak ditampilkan, tetapi x merupakan namespace XAML bahasa XAML untuk XAML 2009):

<my:BusinessObject x:TypeArguments="x:String,x:Int32"/>

Dukungan Generik di WPF

Untuk penggunaan XAML 2006 saat secara khusus menargetkan WPF, x:Class juga harus disediakan pada elemen yang sama dengan x:TypeArguments, dan elemen tersebut harus menjadi elemen root dalam dokumen XAML. Elemen akar harus memetakan ke jenis generik dengan setidaknya satu argumen jenis. Contohnya PageFunction<T>.

Kemungkinan solusi untuk mendukung penggunaan generik termasuk menentukan ekstensi markup kustom yang dapat mengembalikan jenis generik, atau memberikan definisi kelas pembungkus yang berasal dari jenis generik tetapi meratakan batasan generik dalam definisi kelasnya sendiri.

Dalam WPF Anda dapat menggunakan fitur XAML 2009 bersama dengan x:TypeArguments, tetapi hanya untuk XAML longgar (XAML yang tidak dikompilasi markup). XAML yang dikompilasi markup untuk WPF dan bentuk BAML XAML saat ini tidak mendukung kata kunci dan fitur XAML 2009.

Alur kerja kustom di Windows Workflow Foundation untuk .NET Framework 3.5 tidak mendukung penggunaan XAML generik.

Baca juga