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:
VisualElement.Triggers
danStyle.Triggers
jenisIList<TriggerBase>
VisualElement.Behaviors
danStyle.Behaviors
jenisIList<Behavior>
Pemicu
Pemicu adalah kondisi (perubahan properti atau penembakan peristiwa) yang menghasilkan respons (properti lain mengubah atau menjalankan beberapa kode). Properti Triggers
dan VisualElement
Style
berjenis IList<TriggersBase>
. TriggerBase
adalah kelas abstrak dari mana empat kelas tersegel berasal:
Trigger
untuk respons berdasarkan perubahan propertiEventTrigger
untuk respons berdasarkan penembakan peristiwaDataTrigger
untuk respons berdasarkan pengikatan dataMultiTrigger
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 jenisBindableProperty
Value
dari jenisObject
Setters
jenisIList<SetterBase>
, properti konten dariTrigger
Selain itu, Trigger
mengharuskan properti berikut diwarisi dari TriggerBase
ditetapkan:
TargetType
untuk menunjukkan jenis elemen tempatTrigger
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
jenisstring
, nama peristiwaActions
jenisIList<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:
EnterActions
dari jenisIList<TriggerAction>
ExitActions
dari jenisIList<TriggerAction>
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 :
Sampel ButtonEnabler mengatur IsEnabled
properti ke Entry
False
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:
Conditions
dari jenisIList<Condition>
Setters
dari jenisIList<Setter>
Condition
adalah kelas abstrak dan memiliki dua kelas turunan:
PropertyCondition
, yang memilikiProperty
properti danValue
sepertiTrigger
BindingCondition
, yang memilikiBinding
properti danValue
sepertiDataTrigger
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 menyerupaiSwitch
Xamarin.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:
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 .