Ringkasan Bab 8. Kode dan XAML selaras
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.
Bab ini mengeksplorasi XAML lebih dalam, dan terutama bagaimana kode dan XAML berinteraksi.
Meneruskan argumen
Dalam kasus umum, kelas yang dibuat dalam XAML harus memiliki konstruktor tanpa parameter publik; objek yang dihasilkan diinisialisasi melalui pengaturan properti. Namun, ada dua cara lain agar objek dapat diinisialisasi dan diinisialisasi.
Meskipun ini adalah teknik tujuan umum, mereka sebagian besar digunakan sehubungan dengan Model Tampilan MVVM.
Konstruktor dengan argumen
Sampel ParameteredConstructorDemo menunjukkan cara menggunakan x:Arguments
tag untuk menentukan argumen konstruktor. Argumen ini harus dibatasi oleh tag elemen yang menunjukkan jenis argumen. Untuk jenis data .NET dasar, tag berikut tersedia:
x:Object
x:Boolean
x:Byte
x:Int16
x:Int32
x:Int64
x:Single
x:Double
x:Decimal
x:Char
x:String
x:TimeSpan
x:Array
x:DateTime
Dapatkah saya memanggil metode dari XAML?
Sampel FactoryMethodDemo menunjukkan cara menggunakan x:FactoryMethod
elemen untuk menentukan metode pabrik yang dipanggil untuk membuat objek. Metode pabrik seperti itu harus publik dan statis, dan harus membuat objek jenis di mana ia didefinisikan. (Misalnya Color.FromRgb
metode memenuhi syarat karena bersifat publik dan statis dan mengembalikan nilai jenis Color
.) Argumen untuk metode pabrik ditentukan dalam x:Arguments
tag.
Atribut x:Name
Atribut x:Name
memungkinkan objek yang dibuat di XAML untuk diberi nama. Aturan untuk nama-nama ini sama dengan untuk nama variabel C#. Setelah pengembalian InitializeComponent
panggilan di konstruktor, file code-behind dapat merujuk ke nama-nama ini untuk mengakses elemen XAML yang sesuai. Nama-nama sebenarnya dikonversi oleh pengurai XAML menjadi bidang privat di kelas parsial yang dihasilkan.
Sampel XamlClock menunjukkan penggunaan x:Name
untuk memungkinkan file code-behind untuk menjaga dua Label
elemen yang ditentukan dalam XAML diperbarui dengan tanggal dan waktu saat ini.
Nama yang sama tidak dapat digunakan untuk beberapa elemen pada halaman yang sama. Ini adalah masalah khusus jika Anda menggunakan OnPlatform
untuk membuat objek bernama paralel untuk setiap platform. Sampel PlatformSpecificLabele menunjukkan cara yang lebih baik untuk melakukan sesuatu seperti itu.
Tampilan berbasis XAML kustom
Ada beberapa cara untuk menghindari pengulangan markup di XAML. Salah satu teknik umum adalah membuat kelas berbasis XAML baru yang berasal dari ContentView
. Teknik ini ditunjukkan dalam sampel ColorViewList. Kelas ColorView
berasal dari ContentView
untuk menampilkan warna tertentu dan namanya, sementara ColorViewListPage
kelas berasal dari ContentPage
seperti biasa dan secara eksplisit membuat 17 instans ColorView
.
ColorView
Mengakses kelas di XAML memerlukan deklarasi namespace XML lain, yang umumnya dinamai local
untuk kelas dalam rakitan yang sama.
Peristiwa dan handler
Peristiwa dapat ditetapkan ke penanganan aktivitas di XAML, tetapi penanganan aktivitas itu sendiri harus diimplementasikan dalam file code-behind. XamlKeypad menunjukkan cara membangun antarmuka pengguna keypad di XAML dan cara mengimplementasikan Clicked
handler dalam file code-behind.
Ketuk gerakan
Objek apa pun View
dapat memperoleh input sentuhan dan menghasilkan peristiwa dari input tersebut. Kelas View
menentukan GestureRecognizers
properti koleksi yang dapat berisi satu atau beberapa instans kelas yang berasal dari GestureRecognizer
.
Tapped
Menghasilkan TapGestureRecognizer
peristiwa. Program MonkeyTap menunjukkan cara melampirkan TapGestureRecognizer
objek ke empat BoxView
elemen untuk membuat game imitasi:
Tapi program MonkeyTap benar-benar membutuhkan suara. (Lihat bab berikutnya.)