Ringkasan Bab 12. Gaya
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.
Dalam Xamarin.Formsgaya , memungkinkan beberapa tampilan berbagi kumpulan pengaturan properti. Ini mengurangi markup dan memungkinkan mempertahankan tema visual yang konsisten.
Gaya hampir selalu ditentukan dan digunakan dalam markup. Objek jenis Style
dibuat dalam kamus sumber daya lalu diatur ke Style
properti elemen visual menggunakan StaticResource
ekstensi atau DynamicResource
markup.
Gaya dasar
Style
Mengharuskannya TargetType
diatur ke jenis objek visual yang diterapkannya. Style
Ketika diinstansiasi dalam kamus sumber daya (seperti umumnya) itu juga memerlukan x:Key
atribut.
Style
memiliki properti konten jenis Setters
, yang merupakan kumpulan Setter
objek. Setiap Setter
mengaitkan Property
dengan Value
.
Di XAML Property
, pengaturan adalah nama properti CLR (seperti Text
properti Button
) tetapi properti bergaya harus didukung oleh properti yang dapat diikat. Selain itu, properti harus ditentukan dalam kelas yang ditunjukkan oleh pengaturan, atau diwariskan oleh kelas tersebut TargetType
.
Anda dapat menentukan Value
pengaturan menggunakan elemen <Setter.Value>
properti . Ini memungkinkan Anda mengatur Value
ke objek yang tidak dapat diekspresikan dalam string teks, atau ke OnPlatform
objek, atau ke objek yang dibuat menggunakan x:Arguments
atau x:FactoryMethod
. Properti Value
juga dapat diatur dengan StaticResource
ekspresi ke item lain dalam kamus.
Program BasicStyle menunjukkan sintaks dasar dan menunjukkan cara mereferensikan Style
dengan StaticResource
ekstensi markup:
Objek Style
dan objek apa pun yang Value
dibuat dalam Style
objek sebagai pengaturan dibagikan di antara semua tampilan yang merujuk bahwa Style
. Tidak Style
boleh berisi apa pun yang tidak dapat dibagikan, seperti View
turunan.
Penanganan aktivitas tidak dapat diatur dalam Style
. Properti GestureRecognizers
tidak dapat diatur dalam karena Style
tidak didukung oleh properti yang dapat diikat.
Gaya dalam kode
Meskipun tidak umum, Anda dapat membuat instans dan menginisialisasi Style
objek dalam kode. Ini ditunjukkan oleh sampel BasicStyleCode.
Warisan gaya
Style
memiliki BasedOn
properti yang dapat Anda atur ke ekstensi markup yang StaticResource
mereferensikan gaya lain. Ini memungkinkan gaya untuk mewarisi dari gaya sebelumnya, dan menambahkan atau mengganti pengaturan properti. Sampel StyleInheritance menunjukkan ini.
Jika Style2
didasarkan pada Style1
, TargetType
harus Style2
sama dengan Style1
atau berasal dari Style1
. Kamus sumber daya tempat Style1
disimpan harus berupa kamus sumber daya yang sama dengan Style2
atau kamus sumber daya yang lebih tinggi di pohon visual.
Gaya implisit
Style
Jika dalam kamus sumber daya tidak memiliki x:Key
pengaturan atribut, itu diberi kunci kamus secara otomatis, dan Style
objek menjadi gaya implisit. Tampilan tanpa Style
pengaturan dan yang jenisnya cocok TargetType
persis akan menemukan gaya tersebut , seperti yang ditunjukkan oleh sampel ImplicitStyle .
Gaya implisit dapat berasal dari Style
dengan x:Key
pengaturan tetapi bukan sebaliknya. Anda tidak dapat mereferensikan gaya implisit secara eksplisit.
Anda dapat menerapkan tiga jenis hierarki dengan gaya dan BasedOn
:
- Dari gaya yang ditentukan pada
Application
danPage
ke bawah ke gaya yang ditentukan pada tata letak yang lebih rendah di pohon visual. - Dari gaya yang ditentukan untuk kelas dasar seperti
VisualElement
danView
ke gaya yang ditentukan untuk kelas tertentu. - Dari gaya dengan kunci kamus eksplisit hingga gaya implisit.
Hierarki ini ditunjukkan dalam sampel StyleHierarchy.
Gaya dinamis
Gaya dalam kamus sumber daya dapat direferensikan dengan DynamicResource
bukan StaticResource
. Ini membuat gaya menjadi gaya dinamis. Jika gaya tersebut diganti dalam kamus sumber daya dengan gaya lain dengan kunci yang sama, tampilan yang mereferensikan gaya tersebut dengan DynamicResource
perubahan otomatis. Selain itu, tidak adanya entri kamus dengan kunci yang ditentukan akan menyebabkan StaticResource
menimbulkan pengecualian tetapi tidak DynamicResource
.
Anda dapat menggunakan teknik ini untuk mengubah gaya atau tema secara dinamis seperti yang ditunjukkan oleh sampel DynamicStyles .
Namun, Anda tidak dapat mengatur BasedOn
properti ke DynamicResource
ekstensi makeup karena BasedOn
tidak didukung oleh properti yang dapat diikat. Untuk mendapatkan gaya secara dinamis, jangan atur BasedOn
. Sebagai gantinya BaseResourceKey
, atur properti ke kunci kamus gaya yang ingin Anda dapatkan. Sampel DynamicStylesInheritance menunjukkan teknik ini.
Gaya perangkat
Kelas Device.Styles
berlapis mendefinisikan dua belas bidang baca-saja statis untuk enam gaya dengan TargetType
yang Label
dapat Anda gunakan untuk jenis penggunaan teks umum.
Enam bidang ini berjenis Style
yang dapat Anda atur langsung ke Style
properti dalam kode:
Enam bidang lainnya berjenis string
dan dapat digunakan sebagai kunci kamus untuk gaya dinamis:
BodyStyleKey
sama dengan "BodyStyle"TitleStyleKey
sama dengan "TitleStyle"SubtitleStyleKey
sama dengan "SubtitleStyle"CaptionStyleKey
sama dengan "CaptionStyle"ListItemTextStyleKey
sama dengan "ListItemTextStyle"ListItemDetailTextStyleKey
sama dengan "ListItemDetailTextStyle"
Gaya ini diilustrasikan oleh sampel DeviceStylesList.