Bagikan melalui


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:

Cuplikan layar tiga ketukan monyet

Tapi program MonkeyTap benar-benar membutuhkan suara. (Lihat bab berikutnya.)