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:
x:Static
didukung olehStaticExtension
x:Reference
didukung olehReferenceExtension
x:Type
didukung olehTypeExtension
x:Null
didukung olehNullExtension
x:Array
didukung olehArrayExtension
Keempat ekstensi markup XAML ini didukung oleh banyak implementasi XAML, termasuk Xamarin.Forms:
StaticResource
didukung olehStaticResourceExtension
DynamicResource
didukung olehDynamicResourceExtension
Binding
didukung olehBindingExtension
—dibahas dalam Bab 16. Pengikatan dataTemplateBinding
didukung olehTemplateBindingExtension
—tidak tercakup dalam buku
Ekstensi markup XAML tambahan disertakan sehubungan Xamarin.Forms dengan RelativeLayout
:
ConstraintExpression
—tidak tercakup dalam buku
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:
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
, , S
L
, 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.