Shrnutí kapitoly 12. Styly
Poznámka:
Tato kniha byla publikována na jaře roku 2016 a od té doby nebyla aktualizována. Existuje mnoho v knize, která zůstává cenná, ale některé materiály jsou zastaralé a některá témata už nejsou zcela správná nebo úplná.
Styly umožňují Xamarin.Formsvíce zobrazení sdílet kolekci nastavení vlastností. Tím se redukují značky a umožňují udržovat konzistentní vizuální motivy.
Styly jsou téměř vždy definované a spotřebované v revizích. Objekt typu Style
se vytvoří instance ve slovníku prostředků a pak se nastaví na Style
vlastnost vizuálního prvku pomocí StaticResource
rozšíření nebo DynamicResource
značek.
Základní styl
A Style
vyžaduje, aby byl TargetType
nastaven na typ objektu vizuálu, na který se vztahuje. Style
Při vytváření instance ve slovníku prostředků (jak je běžné) vyžaduje x:Key
také atribut.
Vlastnost Style
obsahu typu Setters
, což je kolekce Setter
objektů. Každý Setter
přidruží k Property
sadě Value
.
V kódu XAML Property
je nastavení název vlastnosti CLR (například Text
vlastnost Button
) ale stylovaná vlastnost musí být zajištěna vazbou vlastnost. Vlastnost musí být také definována ve třídě označené TargetType
nastavením nebo zděděna danou třídou.
Nastavení můžete určit Value
pomocí elementu <Setter.Value>
vlastnosti . To vám umožní nastavit Value
objekt, který nelze vyjádřit v textovém řetězci, objektu nebo OnPlatform
objektu, který vytvoří instanci pomocí x:Arguments
nebo x:FactoryMethod
. Vlastnost Value
lze také nastavit pomocí výrazu na jinou StaticResource
položku ve slovníku.
Program BasicStyle ukazuje základní syntaxi a ukazuje, jak odkazovat Style
s rozšířením StaticResource
značek:
Objekt Style
a jakýkoli objekt vytvořený v objektu Style
jako Value
nastavení jsou sdíleny mezi všemi zobrazeními odkazujícími na to Style
. Nesmí Style
obsahovat nic, co nelze sdílet, například View
derivát.
Obslužné rutiny událostí nelze nastavit v objektu Style
. Vlastnost GestureRecognizers
nelze nastavit v objektu, Style
protože není zajištěna vlastnostmi, které lze svázat.
Styly v kódu
I když to není běžné, můžete vytvořit instanci a inicializovat Style
objekty v kódu. To ukazuje ukázka BasicStyleCode.
Dědičnost stylů
Style
BasedOn
má vlastnost, kterou můžete nastavit na StaticResource
rozšíření značek odkazující na jiný styl. To umožňuje dědit styly z předchozích stylů a přidávat nebo nahrazovat nastavení vlastností. Ukázka StyleInheritance to demonstruje.
Je-li Style2
založen na Style1
, TargetType
musí být stejná Style2
jako Style1
nebo odvozena z Style1
. Slovník prostředků, ve kterém Style1
je uložený, musí být stejný slovník prostředků jako Style2
slovník prostředků nebo slovník prostředků vyšší ve vizuálním stromu.
Implicitní styly
Style
Pokud slovník prostředků nemá x:Key
nastavení atributu, přiřadí se automaticky klíč slovníku a Style
objekt se změní na implicitní styl. Zobrazení bez Style
nastavení a jehož typ přesně odpovídá TargetType
tomuto stylu, jak ukazuje ukázka ImplicitStyle.
Implicitní styl může být odvozen z Style
x:Key
nastavení, ale ne z jiného způsobu. Nelze explicitně odkazovat na implicitní styl.
Pomocí stylů můžete implementovat tři typy hierarchie a BasedOn
:
- Od stylů definovaných
Application
podle aPage
dolů po styly definované v rozloženích nižších ve vizuálním stromu. - Ze stylů definovaných pro základní třídy, jako
VisualElement
jsou aView
styly definované pro konkrétní třídy. - Od stylů s explicitními klíči slovníku až po implicitní styly.
Tyto hierarchie jsou demonstrované v ukázce StyleHierarchy.
Dynamické styly
Styl ve slovníku prostředků lze odkazovat DynamicResource
spíše než StaticResource
na . Tím se styl změní na dynamický styl. Pokud je tento styl ve slovníku prostředků nahrazen jiným stylem se stejným klíčem, zobrazení odkazující na tento styl se DynamicResource
automaticky změní. Také absence položky slovníku se zadaným klíčem způsobí StaticResource
vyvolání výjimky, ale ne DynamicResource
.
Tuto techniku můžete použít k dynamické změně stylu nebo motivů, jak ukazuje ukázka DynamicStyles.
Vlastnost však nelze nastavit BasedOn
na DynamicResource
rozšíření make-upu, protože BasedOn
není zajištěna vazbou vlastnost. Chcete-li odvodit styl dynamicky, nenastavujte BasedOn
. Místo toho nastavte BaseResourceKey
vlastnost na klíč slovníku stylu, ze kterého chcete odvodit. Ukázka DynamicStylesInheritance ukazuje tuto techniku.
Styly zařízení
Vnořená Device.Styles
třída definuje dvanáct statických polí jen pro čtení pro šest stylů s TargetType
Label
tím, že můžete použít pro běžné typy použití textu.
Šest z těchto polí je typu Style
, které můžete nastavit přímo na Style
vlastnost v kódu:
Dalších šest polí je typu string
a lze je použít jako klíče slovníku pro dynamické styly:
BodyStyleKey
rovná se "BodyStyle"TitleStyleKey
equal to "TitleStyle"SubtitleStyleKey
equal to "SubtitleStyle"CaptionStyleKey
equal to "CaptionStyle"ListItemTextStyleKey
equal to "ListItemTextStyle"ListItemDetailTextStyleKey
equal to "ListItemDetailTextStyle"
Tyto styly jsou ilustrovány ukázkou DeviceStylesList .