Bagikan melalui


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, , doublebool, 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 LabelText.

Teks yang diformat

Sampel TextVariations berisi beberapa contoh pengaturan Text properti Labeldan 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 :

Cuplikan layar tiga kali berbagi variasi teks