Bagikan melalui


Ringkasan Bab 23. Pemicu dan perilaku

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.

Pemicu dan perilaku serupa, karena keduanya dimaksudkan untuk digunakan dalam file XAML untuk menyederhanakan interaksi elemen di luar penggunaan pengikatan data, dan untuk memperluas fungsionalitas elemen XAML. Pemicu dan perilaku hampir selalu digunakan dengan objek antarmuka pengguna visual.

Untuk mendukung pemicu dan perilaku, keduanya VisualElement dan Style mendukung dua properti koleksi:

Pemicu

Pemicu adalah kondisi (perubahan properti atau penembakan peristiwa) yang menghasilkan respons (properti lain mengubah atau menjalankan beberapa kode). Properti Triggers dan VisualElementStyle berjenis IList<TriggersBase>. TriggerBase adalah kelas abstrak dari mana empat kelas tersegel berasal:

  • Trigger untuk respons berdasarkan perubahan properti
  • EventTrigger untuk respons berdasarkan penembakan peristiwa
  • DataTrigger untuk respons berdasarkan pengikatan data
  • MultiTrigger untuk respons berdasarkan beberapa pemicu

Pemicu selalu diatur pada elemen yang propertinya sedang diubah oleh pemicu.

Pemicu paling sederhana

Kelas Trigger memeriksa perubahan nilai properti dan merespons dengan mengatur properti lain dari elemen yang sama.

Trigger menentukan tiga properti:

  • Property dari jenis BindableProperty
  • Value dari jenis Object
  • Setters jenis IList<SetterBase>, properti konten dari Trigger

Selain itu, Trigger mengharuskan properti berikut diwarisi dari TriggerBase ditetapkan:

  • TargetType untuk menunjukkan jenis elemen tempat Trigger elemen dilampirkan

Property dan Value terdiri dari kondisi, dan Setters koleksi adalah responsnya. Ketika yang ditunjukkan Property memiliki nilai yang ditunjukkan oleh Value, maka Setter objek dalam Setters koleksi diterapkan. Property Ketika memiliki nilai yang berbeda, setter akan dihapus. Setter mendefinisikan dua properti yang sama dengan dua properti pertama dari Trigger:

Sampel EntryPop menunjukkan bagaimana diterapkan Trigger ke Entry dapat meningkatkan ukuran Entry melalui Scale properti ketika IsFocused properti Entry adalah true.

Meskipun tidak umum, Trigger dapat diatur dalam kode, seperti yang ditunjukkan oleh sampel EntryPopCode .

Sampel StyledTriggers menunjukkan bagaimana Trigger dapat diatur dalam untuk Style diterapkan ke beberapa Entry elemen.

Memicu tindakan dan animasi

Dimungkinkan juga untuk menjalankan sedikit kode berdasarkan pemicu. Kode ini bisa menjadi animasi yang menargetkan properti. Salah satu cara umumnya adalah dengan menggunakan EventTrigger, yang mendefinisikan dua properti:

  • Event jenis string, nama peristiwa
  • Actions jenis IList<TriggerAction>, daftar tindakan yang akan dijalankan sebagai respons.

Untuk menggunakan ini, Anda perlu menulis kelas yang berasal dari TriggerAction<T>, umumnya TriggerAction<VisualElement>. Anda dapat menentukan properti di kelas ini. Ini adalah properti CLR biasa daripada properti yang dapat diikat karena TriggerAction tidak berasal dari BindableObject. Anda harus mengambil Invoke alih metode yang dipanggil ketika tindakan dipanggil. Argumen adalah elemen target.

Kelas ScaleAction di Xamarin.Formspustaka Book.Toolkit adalah contohnya. Ini memanggil ScaleTo properti untuk menganimasikan Scale properti elemen. Karena salah satu propertinya berjenis Easing, EasingConverter kelas memungkinkan Anda menggunakan bidang statis standar Easing di XAML.

Sampel EntrySwell menunjukkan cara memanggil ScaleAction dari EventTrigger objek yang memantau Focused peristiwa dan Unfocused .

Sampel CustomEasingSwell menunjukkan cara menentukan fungsi penguraian kustom untuk ScaleAction dalam file code-behind.

Anda juga dapat memanggil tindakan menggunakan Trigger (sebagaimana dibedakan dari EventTrigger). Ini mengharuskan Anda menyadari bahwa TriggerBase mendefinisikan dua koleksi:

Sampel EnterExitSwell menunjukkan cara menggunakan koleksi ini.

Pemicu peristiwa lainnya

Kelas ScaleUpAndDownAction di Xamarin.Formspustaka Book.Toolkit memanggil ScaleTo dua kali untuk meningkatkan dan menurunkan skala. Sampel ButtonGrowth menggunakan ini dalam gaya EventTrigger untuk memberikan umpan balik visual saat Button ditekan. Animasi ganda ini juga dimungkinkan menggunakan dua tindakan dalam kumpulan jenis DelayedScaleAction

Kelas ShiverAction di Xamarin.Formspustaka Book.Toolkit mendefinisikan tindakan shiver yang dapat disesuaikan. Sampel ShiverButtonDemo menunjukkannya.

Kelas NumericValidationAction diXamarin.Forms pustaka Book.Toolkit dibatasi untuk Entry elemen dan mengatur TextColor properti menjadi merah jika Text properti bukan .double Sampel TriggerEntryValidation menunjukkannya.

Pemicu data

DataTrigger mirip dengan Trigger kecuali bahwa alih-alih memantau properti untuk perubahan nilai, properti memantau pengikatan data. Ini memungkinkan properti dalam satu elemen memengaruhi properti di elemen lain.

DataTrigger menentukan tiga properti:

Sampel GenderColors memerlukan pustaka SchoolOfFineArt dan mengatur warna nama siswa menjadi biru atau merah muda berdasarkan Sex properti :

Cuplikan layar tiga kali warna gender

Sampel ButtonEnabler mengatur IsEnabled properti ke EntryFalse jika Length properti Text properti sama Entry dengan 0. Perhatikan bahwa properti diinisialisasi Text ke string kosong; secara default adalah null, dan DataTrigger tidak akan berfungsi dengan benar.

Menggabungkan kondisi di MultiTrigger

adalah MultiTrigger kumpulan kondisi. Ketika semuanya true, maka setter diterapkan. Kelas menentukan dua properti:

Condition adalah kelas abstrak dan memiliki dua kelas turunan:

Dalam sampel AndConditions, hanya BoxView berwarna ketika empat Switch elemen semuanya diaktifkan.

Sampel OrConditions menunjukkan bagaimana Anda dapat membuat BoxView warna ketika salah satu dari empat Switch elemen diaktifkan. Ini membutuhkan penerapan Hukum De Morgan dan membalikkan semua logika.

Menggabungkan logika AND dan OR tidak begitu mudah dan umumnya membutuhkan elemen yang tidak terlihat Switch untuk hasil menengah. Sampel XorConditions menunjukkan bagaimana dapat Button diaktifkan jika salah satu dari dua Entry elemen memiliki beberapa teks yang diketik, tetapi tidak jika keduanya memiliki beberapa teks yang diketik.

Perilaku

Apa pun yang dapat Anda lakukan dengan pemicu, Anda juga dapat melakukan dengan perilaku, tetapi perilaku selalu memerlukan kelas yang berasal dari Behavior<T> dan mengambil alih dua metode berikut:

Argumen adalah elemen tempat perilaku dilampirkan. Umumnya, metode melampirkan OnAttachedTo beberapa penanganan aktivitas, dan OnDetachingFrom melepaskannya. Karena kelas seperti itu biasanya menyimpan beberapa status, umumnya tidak dapat dibagikan dalam .Style

Sampel BehaviorEntryValidation mirip dengan TriggerEntryValidation kecuali menggunakan perilaku — NumericValidationBehavior kelas diXamarin.Forms pustaka Book.Toolkit.

Perilaku dengan properti

Behavior<T> berasal dari Behavior, yang berasal dari BindableObject, sehingga properti yang dapat diikat dapat didefinisikan pada perilaku. Properti ini dapat aktif dalam pengikatan data.

Ini ditunjukkan dalam program EmailValidationDemo yang menggunakan ValidEmailBehavior kelas di Xamarin.Formspustaka Book.Toolkit. ValidEmailBehavior memiliki properti yang dapat diikat baca-saja dan berfungsi sebagai sumber dalam pengikatan data.

Sampel EmailValidationConv menggunakan perilaku yang sama ini untuk menampilkan jenis indikator lain untuk memberi sinyal bahwa alamat email valid.

Sampel EmailValidationTrigger adalah variasi pada sampel sebelumnya. ButtonGlide menggunakan DataTrigger dalam kombinasi dengan perilaku tersebut.

Tombol dan kotak centang

Dimungkinkan untuk merangkum perilaku tombol pengalih di kelas seperti ToggleBehavior di Xamarin.Formspustaka Book.Toolkit, lalu menentukan semua visual untuk pengalih sepenuhnya di XAML.

Sampel ToggleLabel menggunakan ToggleBehavior dengan DataTrigger untuk menggunakan Label dengan dua string teks untuk tombol.

Sampel FormattedTextToggle memperluas konsep ini dengan beralih di antara dua FormattedString objek.

Kelas ToggleBase di Xamarin.Formspustaka Book.Toolkit berasal dari ContentView, mendefinisikan IsToggled properti, dan menggabungkan ToggleBehavior untuk logika pengalih. Ini memudahkan untuk menentukan tombol alih di XAML, seperti yang ditunjukkan oleh sampel TraditionalCheckBox.

SwitchCloneDemo mencakup SwitchClone kelas yang berasal dari ToggleBase dan menggunakan TranslateAction kelas untuk membuat tombol pengalih yang menyerupaiSwitchXamarin.Forms .

RotateAction Dalam Book.Toolkit menyediakan animasi yang digunakan untuk membuat tuas animasi dalam sampel LeverToggle.Xamarin.Forms

Menanggapi ketukan

Salah satu kelemahannya EventTrigger adalah Anda tidak dapat melampirkannya ke TapGestureRecognizer untuk merespons ketukan. Mengatasi masalah itu adalah tujuan TapBehavior dalam Xamarin.FormsBook.Toolkit

Sampel BoxViewTapShiver menggunakan TapBehavior untuk menggunakan yang lebih lama ShiverAction untuk elemen yang diketuk BoxView .

Sampel ShiverViews menunjukkan cara mengurangi markup dengan merangkum ShiverView kelas.

Tombol radio

Pustaka Xamarin.FormsBook.Toolkit juga memiliki RadioBehavior kelas untuk membuat tombol radio yang dikelompokkan menurut string nama grup.

Program RadioLabels menggunakan string teks untuk tombol radionya. Sampel RadioStyle menggunakan Style untuk perbedaan tampilan antara tombol yang dicentang dan tidak dicentang. Sampel RadioImages menggunakan gambar kotak untuk tombol radionya:

Cuplikan layar tiga kali gambar Radio

Sampel TraditionalRadios menggambar tombol radio tradisional yang muncul dengan titik di dalam lingkaran.

Pudar dan orientasi

Sampel akhir, MultiColorSliders memungkinkan Anda beralih di antara tiga tampilan pemilihan warna yang berbeda menggunakan tombol radio. Tiga tampilan memudar masuk dan keluar menggunakan FadeEnableAction di Xamarin.Formspustaka Book.Toolkit.

Program ini juga merespons perubahan orientasi antara potret dan lanskap menggunakan GridOrientationBehavior di Xamarin.Formspustaka Book.Toolkit .