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 Setters
bir içerik özelliğine Setter
sahiptir. Her Setter
bir ile ilişkilendirir Property
Value
.
XAML'de Property
ayar bir CLR özelliğinin adıdır (özelliği gibi Text
Button
), 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:FactoryMethod
kullanı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:
Style
Nesnesi ve nesnede Style
ayar olarak oluşturulan herhangi bir Value
nesne, buna Style
baş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 Style
ayarlanamaz. Ö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 Style2
Style1
, öğesinin TargetType
Style2
ile aynı Style1
veya türetilmiş Style1
olması 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 Style
x:Key
stilinden türetilebilir, ancak tersi anlamına gelmez. Örtük stile açıkça başvuramazsınız.
stilleri ve BasedOn
ile üç tür hiyerarşi uygulayabilirsiniz:
- ve
Page
üzerinde tanımlanan stillerden görsel ağacınınApplication
alt kısmındaki düzenlerde tanımlanan stillere kadar. - ve
View
gibiVisualElement
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 StaticResource
tarafı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 TargetType
Label
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:
BodyStyleKey
eşittir "BodyStyle"TitleStyleKey
eşittir "TitleStyle"SubtitleStyleKey
eşittir "SubtitleStyle"CaptionStyleKey
eşittir "CaptionStyle"ListItemTextStyleKey
eşittir "ListItemTextStyle"ListItemDetailTextStyleKey
eşittir "ListItemDetailTextStyle"
Bu stiller DeviceStylesList örneği tarafından gösterilmiştir.