Share via


Bölüm 12'nin özeti. Stiller

Not

Bu kitap 2016 baharında yayımlanmıştır ve o zamandan beri güncellenmemiştir. Kitapta değerli kalan çok şey vardır, ancak bazı malzemeler eskidir ve bazı konular artık tamamen doğru veya eksiksiz değildir.

'de Xamarin.Formsstiller, birden çok görünümün bir özellik ayarları koleksiyonunu paylaşmasına olanak sağlar. Bu, işaretlemeyi azaltır ve tutarlı görsel temaların korunmasını sağlar.

Stiller neredeyse her zaman tanımlanır ve işaretlemede tüketilir. Türdeki Style bir nesnenin örneği bir kaynak sözlüğünde oluşturulur ve ardından veya DynamicResource işaretleme uzantısı kullanılarak StaticResource görsel öğenin özelliğine Style ayarlanır.

Temel Stil

A Style , geçerli TargetType olduğu görsel nesnenin türüne ayarlanmasını gerektirir. Kaynak Style sözlüğünde örneği oluşturulurken (yaygın olarak olduğu gibi) bir x:Key öznitelik de gerekir.

, Style nesne koleksiyonu olan türünde Settersbir içerik özelliğine Setter sahiptir. Her Setter bir ile ilişkilendirir PropertyValue.

XAML'de Property ayar bir CLR özelliğinin adıdır (özelliği gibi TextButton), ancak stilli özelliğin bağlanabilir bir özellik tarafından yedeklenmiş olması gerekir. Ayrıca, özelliği ayarıyla belirtilen veya bu sınıf tarafından devralınan TargetType sınıfında tanımlanmalıdır.

özelliğini <Setter.Value>kullanarak ayarı belirtebilirsinizValue. Bu, bir metin dizesinde ifade edilmeyecek bir nesneye veya bir OnPlatform nesneye ya da veya x:FactoryMethodkullanılarak x:Arguments örneklenen bir nesneye ayarlamanıza Value olanak tanır. Özelliği Value , bir ifadeyle sözlükteki başka bir StaticResource öğeye de ayarlanabilir.

BasicStyle programı, temel söz dizimini gösterir ve biçimlendirme uzantısıyla StaticResource nasıl başvurulduğunu Style gösterir:

Temel stilin üçlü ekran görüntüsü

Style Nesnesi ve nesnede Style ayar olarak oluşturulan herhangi bir Value nesne, buna Stylebaşvuran tüm görünümler arasında paylaşılır. , Style türevi gibi View paylaşılamayan hiçbir şeyi içeremez.

Olay işleyicileri içinde Styleayarlanamaz. Özelliği GestureRecognizers , bağlanabilir bir Style özellik tarafından yedeklenmediğinden içinde ayarlanamıyor.

Koddaki stiller

Yaygın olmasa da, kodda nesneleri başlatabilir ve başlatabilirsiniz Style . Bu, BasicStyleCode örneği tarafından gösterilmiştir.

Stil devralma

Style , başka bir BasedOn stile başvuran bir işaretleme uzantısına ayarlayabileceğiniz bir StaticResource özelliğe sahiptir. Bu, stillerin önceki stillerden devralınmasına ve özellik ayarlarını eklemesine veya değiştirmesine olanak tanır. StyleInheritance örneği bunu gösterir.

tabanlıysa Style2Style1, öğesinin TargetTypeStyle2 ile aynı Style1 veya türetilmiş Style1olması gerekir. Depolandığı Style1 kaynak sözlüğü, görsel ağaçta bulunan kaynak sözlüğüyle Style2 aynı veya daha yüksek bir kaynak sözlüğü olmalıdır.

Örtük stiller

Kaynak sözlüğünde bir Style öznitelik ayarı yoksa x:Key , otomatik olarak bir sözlük anahtarı atanır ve Style nesne örtük bir stile dönüşür. Ayarsız ve türü tam olarak eşleşen bir Style görünüm, ImplicitStyle örneğinde gösterildiği gibi bu stili TargetType bulur.

Örtük stil, ayarı olan bir Stylex:Key stilinden türetilebilir, ancak tersi anlamına gelmez. Örtük stile açıkça başvuramazsınız.

stilleri ve BasedOnile üç tür hiyerarşi uygulayabilirsiniz:

  • ve Page üzerinde tanımlanan stillerden görsel ağacının Application alt kısmındaki düzenlerde tanımlanan stillere kadar.
  • ve View gibi VisualElement temel sınıflar için tanımlanan stillerden belirli sınıflar için tanımlanan stillere.
  • Açık sözlük tuşları olan stillerden örtük stillere.

Bu hiyerarşiler StyleHierarchy örneğinde gösterilmiştir .

Dinamik stiller

Kaynak sözlüğündeki stile yerine StaticResourcetarafından DynamicResource başvurulabilir. Bu, stili dinamik bir stil yapar. Bu stil kaynak sözlüğünde aynı anahtara sahip başka bir stille değiştirilirse, bu stile DynamicResource başvuran görünümler otomatik olarak değişir. Ayrıca, belirtilen anahtara sahip bir sözlük girdisinin olmaması özel durum oluşturmasına neden StaticResource olur, ancak neden olmaz DynamicResource.

DynamicStyles örneğinde gösterildiği gibi stili veya temaları dinamik olarak değiştirmek için bu tekniği kullanabilirsiniz.

Ancak, bağlanabilir bir özellik tarafından yedeklenmediğinden BasedOn özelliğini bir DynamicResource makyaj uzantısına ayarlayamazsınızBasedOn. Bir stili dinamik olarak türetmek için ayarlamayın BasedOn. Bunun yerine, özelliğini türetmek istediğiniz stilin sözlük anahtarına ayarlayın BaseResourceKey . DynamicStylesInheritance örneği bu tekniği gösterir.

Cihaz stilleri

İç Device.Styles içe geçmiş sınıf, altı stil TargetTypeLabel için on iki statik salt okunur alan tanımlar ve bunlardan birini sık kullanılan metin kullanımı türleri için kullanabilirsiniz.

Bu alanların altısı, koddaki bir Style özelliğe doğrudan ayarlayabileceğiniz türdedirStyle:

Diğer altı alan türündedir string ve dinamik stiller için sözlük anahtarları olarak kullanılabilir:

Bu stiller DeviceStylesList örneği tarafından gösterilmiştir.