Ringkasan Bab 7. XAML vs. kode
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.
Xamarin.Forms mendukung bahasa markup berbasis XML yang disebut Extensible Application Markup Language atau XAML (diucapkan "zammel"). XAML menyediakan alternatif untuk C# dalam menentukan tata letak antarmuka Xamarin.Forms pengguna aplikasi, dan dalam menentukan pengikatan antara elemen antarmuka pengguna dan data yang mendasar.
Properti dan atribut
Xamarin.Forms kelas dan struktur menjadi elemen XML di XAML, dan properti kelas dan struktur ini menjadi atribut XML. Untuk diinstansiasi di XAML, kelas umumnya harus memiliki konstruktor tanpa parameter publik. Properti apa pun yang diatur dalam XAML harus memiliki aksesor publik set
.
Untuk properti jenis data dasar (string
, , double
bool
, dan sebagainya), pengurai XAML menggunakan metode standar TryParse
untuk mengonversi pengaturan atribut ke jenis ini. Pengurai XAML juga dapat dengan mudah menangani jenis enumerasi, dan dapat menggabungkan anggota enumerasi jika jenis enumerasi ditandai dengan Flags
atribut .
Untuk membantu pengurai XAML, jenis yang lebih kompleks (atau properti dari jenis tersebut) dapat menyertakan TypeConverterAttribute
yang mengidentifikasi kelas yang berasal dari TypeConverter
mana mendukung konversi dari nilai string ke jenis tersebut. Misalnya, ColorTypeConverter
mengonversi nama warna dan string, seperti "#rrggbb", menjadi Color
nilai.
Sintaksis elemen properti
Di XAML, kelas dan objek yang dibuat darinya dinyatakan sebagai elemen XML. Ini dikenal sebagai elemen objek. Sebagian besar properti objek ini dinyatakan sebagai atribut XML. Ini disebut atribut properti.
Terkadang properti harus diatur ke objek yang tidak dapat diekspresikan sebagai string sederhana. Dalam kasus seperti itu, XAML mendukung tag yang disebut elemen properti yang terdiri dari nama kelas dan nama properti yang dipisahkan oleh titik. Elemen objek kemudian dapat muncul dalam sepasang tag elemen properti.
Menambahkan halaman XAML ke proyek Anda
Xamarin.Forms Pustaka Kelas Portabel dapat berisi halaman XAML saat pertama kali dibuat, atau Anda dapat menambahkan halaman XAML ke proyek yang sudah ada. Dalam dialog untuk menambahkan item baru, pilih item yang merujuk ke halaman XAML, atau ContentPage
dan XAML. (Bukan . ContentView
)
Catatan
Opsi Visual Studio telah berubah sejak bab ini ditulis.
Dua file dibuat: file XAML dengan ekstensi nama file .xaml, dan file C# dengan ekstensi .xaml.cs. File C# sering disebut sebagai kode di belakang file XAML. File code-behind adalah definisi kelas parsial yang berasal dari ContentPage
. Pada waktu build, XAML diurai dan definisi kelas parsial lainnya dihasilkan untuk kelas yang sama. Kelas yang dihasilkan ini mencakup metode bernama InitializeComponent
yang dipanggil dari konstruktor file code-behind.
Selama runtime, pada akhir InitializeComponent
panggilan, semua elemen file XAML telah diinisialisasi dan diinisialisasi seolah-olah telah dibuat dalam kode C#.
Elemen akar dalam file XAML adalah ContentPage
. Tag akar berisi setidaknya dua deklarasi namespace XML, satu untuk Xamarin.Forms elemen dan yang lain menentukan awalan x
untuk elemen dan atribut intrinsik untuk semua implementasi XAML. Tag akar juga berisi x:Class
atribut yang menunjukkan namespace layanan dan nama kelas yang berasal dari ContentPage
. Ini cocok dengan namespace layanan dan nama kelas dalam file code-behind.
Kombinasi XAML dan kode ditunjukkan oleh sampel CodePlusXaml.
Pengkompilasi XAML
Xamarin.Forms memiliki kompilator XAML, tetapi penggunaannya bersifat opsional berdasarkan penggunaan XamlCompilationAttribute
. Jika XAML tidak dikompilasi, XAML diurai pada waktu build, dan file XAML disematkan di PCL, di mana XAML juga diurai saat runtime. Jika XAML dikompilasi, proses build mengonversi XAML menjadi bentuk biner, dan pemrosesan runtime lebih efisien.
Kekhususan platform dalam file XAML
Di XAML, OnPlatform
kelas dapat digunakan untuk memilih markup yang bergantung pada platform. Ini adalah kelas generik dan harus dibuat dengan atribut yang cocok dengan x:TypeArguments
jenis target. Kelasnya OnIdiom
mirip tetapi digunakan jauh lebih jarang.
Penggunaan OnPlatform
telah berubah sejak buku diterbitkan. Ini awalnya digunakan bersama dengan properti bernama iOS
, Android
, dan WinPhone
. Sekarang digunakan dengan objek anak On
. Atur Platform
properti ke string yang konsisten dengan bidang Device
publik const
kelas. Atur Value
properti ke nilai yang konsisten dengan x:TypeArguments
atribut OnPlatform
tag.
OnPlatform
ditunjukkan dalam sampel ScaryColorList , jadi dipanggil karena berisi blok XAML yang hampir identik. Keberadaan markup berulang ini menunjukkan bahwa teknik harus tersedia untuk menguranginya.
Atribut properti konten
Beberapa elemen properti terjadi cukup sering, seperti <ContentPage.Content>
tag pada elemen akar dari ContentPage
, atau <StackLayout.Children>
tag yang mengapit turunan dari StackLayout
.
Setiap kelas diizinkan untuk mengidentifikasi satu properti dengan ContentPropertyAttribute
di kelas . Untuk properti ini, tag elemen properti tidak diperlukan. ContentPage
mendefinisikan properti kontennya sebagai Content
, dan Layout<T>
(kelas dari mana StackLayout
berasal) mendefinisikan properti kontennya sebagai Children
. Tag elemen properti ini tidak diperlukan.
Elemen properti adalah Label
Text
.
Teks yang diformat
Sampel TextVariations berisi beberapa contoh pengaturan Text
properti Label
dan FormattedText
. Di XAML, Span
objek muncul sebagai turunan FormattedString
objek.
Saat string multibaris diatur ke Text
properti , karakter akhir baris dikonversi ke karakter spasi, tetapi karakter akhir baris dipertahankan saat string multibaris muncul sebagai konten Label
tag atau Label.Text
: