Sdílet prostřednictvím


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:

Trojitý snímek obrazovky se základním stylem

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ů

StyleBasedOn 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 a Page 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 a View 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ž StaticResourcena . 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:

Tyto styly jsou ilustrovány ukázkou DeviceStylesList .