Bagikan melalui


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:

Cuplikan layar tiga kali dari gaya dasar

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 dan Page ke bawah ke gaya yang ditentukan pada tata letak yang lebih rendah di pohon visual.
  • Dari gaya yang ditentukan untuk kelas dasar seperti VisualElement dan View 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:

Gaya ini diilustrasikan oleh sampel DeviceStylesList.