Bagikan melalui


Ringkasan Bab 10. Ekstensi markup XAML

Catatan

Buku ini diterbitkan pada musim semi 2016, dan belum diperbarui sejak saat itu. Ada banyak dalam buku yang tetap berharga, tetapi beberapa materi sudah kedaluarsa, dan beberapa topik tidak lagi sepenuhnya benar atau lengkap.

Biasanya, pengurai XAML mengonversi string apa pun yang ditetapkan sebagai nilai atribut ke jenis properti berdasarkan konversi standar untuk jenis data .NET dasar, atau turunan yang TypeConverter dilampirkan ke properti atau jenisnya dengan TypeConverterAttribute.

Tetapi terkadang lebih mudah untuk mengatur atribut dari sumber yang berbeda, misalnya, item dalam kamus, atau nilai properti atau bidang statis, atau dari perhitungan semacam itu.

Ini adalah pekerjaan ekstensi markup XAML. Terlepas dari namanya, ekstensi markup XAML bukan ekstensi untuk XML. XAML selalu legal XML.

Infrastruktur kode

Ekstensi markup XAML adalah kelas yang mengimplementasikan IMarkupExtension antarmuka. Kelas seperti itu sering memiliki kata Extension di akhir namanya tetapi biasanya muncul di XAML tanpa akhiran itu.

Ekstensi markup XAML berikut didukung oleh semua implementasi XAML:

Keempat ekstensi markup XAML ini didukung oleh banyak implementasi XAML, termasuk Xamarin.Forms:

Ekstensi markup XAML tambahan disertakan sehubungan Xamarin.Forms dengan RelativeLayout:

Mengakses anggota statis

x:Static Gunakan elemen untuk mengatur atribut ke nilai properti statis publik, bidang, atau anggota enumerasi. Atur Member properti ke anggota statis. Biasanya lebih mudah ditentukan x:Static dan nama anggota dalam kurung kurawal. Nama Member properti tidak perlu disertakan, hanya anggota itu sendiri. Sintaks umum ini ditampilkan dalam sampel SharedStatics. Bidang statis itu sendiri didefinisikan dalam AppConstants kelas . Teknik ini memungkinkan Anda untuk menetapkan konstanta yang digunakan melalui program.

Dengan deklarasi namespace XML tambahan, Anda dapat mereferensikan properti statis publik, bidang, atau anggota enumerasi yang ditentukan dalam kerangka kerja .NET, seperti yang ditunjukkan dalam sampel SystemStatics.

Kamus sumber daya

Kelas VisualElement menentukan properti bernama Resources yang dapat Anda atur ke objek jenis ResourceDictionary. Dalam XAML, Anda dapat menyimpan item dalam kamus ini dan mengidentifikasinya dengan x:Key atribut . Item yang disimpan dalam kamus sumber daya dibagikan di antara semua referensi ke item.

StaticResource untuk sebagian besar tujuan

Dalam kebanyakan kasus, Anda akan menggunakan StaticResource ekstensi markup untuk mereferensikan item dari kamus sumber daya, seperti yang ditunjukkan oleh sampel ResourceSharing . Anda dapat menggunakan StaticResourceExtension elemen atau StaticResource dalam kurung kurawal:

Cuplikan layar tiga kali berbagi sumber daya

Jangan membingungkan x:Static ekstensi markup dan StaticResource ekstensi markup.

Pohon kamus

Ketika pengurai XAML menemukan StaticResource, ia mulai mencari pohon visual untuk kunci yang cocok, dan kemudian melihat di ResourceDictionary kelas aplikasi App . Ini memungkinkan item dalam kamus sumber daya lebih dalam di pohon visual untuk mengambil alih kamus sumber daya yang lebih tinggi di pohon visual. Ini ditunjukkan dalam sampel ResourceTrees.

DynamicResource untuk tujuan khusus

Ekstensi StaticResource markup menyebabkan item diambil dari kamus saat pohon visual dibangun selama InitializeComponent panggilan. Alternatifnya StaticResource adalah DynamicResource, yang mempertahankan tautan ke kunci kamus dan memperbarui target saat item yang direferensikan oleh kunci berubah.

Perbedaan antara StaticResource dan ditunjukkan dalam sampel DynamicVsStatic.DynamicResource

Properti yang ditetapkan oleh DynamicResource harus didukung oleh properti yang dapat diikat seperti yang dibahas dalam Bab 11, Infrastruktur yang dapat diikat.

Ekstensi markup yang kurang digunakan

x:Null Gunakan ekstensi markup untuk mengatur properti ke null.

x:Type Gunakan ekstensi markup untuk mengatur properti ke objek .NETType.

Gunakan x:Array untuk menentukan array. Tentukan jenis anggota array dengan mengatur properti [Type] ke x:Type ekstensi markup.

Ekstensi markup kustom

Anda dapat membuat ekstensi markup XAML Anda sendiri dengan menulis kelas yang mengimplementasikan IMarkupExtension antarmuka dengan ProvideValue metode .

Kelas HslColorExtension memenuhi persyaratan tersebut. Ini membuat nilai jenis Color berdasarkan nilai properti bernama H, , SL, dan A. Kelas ini adalah item pertama dalam Xamarin.Forms pustaka bernama Xamarin.FormsBook.Toolkit yang dibangun dan digunakan selama buku ini.

Sampel CustomExtensionDemo menunjukkan cara mereferensikan pustaka ini dan menggunakan ekstensi markup kustom.