Shrnutí kapitoly 10. Rozšíření značek XAML
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á.
Analyzátor XAML za normálních okolností převede jakýkoli řetězec nastavený jako hodnotu atributu na typ vlastnosti na základě standardních převodů pro základní datové typy .NET, nebo TypeConverter
derivát připojený k vlastnosti nebo jeho typu s TypeConverterAttribute
.
Někdy je ale vhodné nastavit atribut z jiného zdroje, například položky ve slovníku, nebo hodnotu statické vlastnosti nebo pole nebo z výpočtu určitého druhu.
Toto je úloha rozšíření značek XAML. Navzdory názvu nejsou rozšíření značek XAML příponou XML. XAML je vždy právní XML.
Infrastruktura kódu
Rozšíření značek XAML je třída, která implementuje IMarkupExtension
rozhraní. Taková třída často obsahuje slovo Extension
na konci jeho názvu, ale obvykle se zobrazí v XAML bez této přípony.
Všechny implementace XAML podporují následující rozšíření značek XAML:
x:Static
podporovánoStaticExtension
x:Reference
podporovánoReferenceExtension
x:Type
podporovánoTypeExtension
x:Null
podporovánoNullExtension
x:Array
podporovánoArrayExtension
Tato čtyři rozšíření značek XAML jsou podporována mnoha implementacemi XAML, včetně Xamarin.Forms:
StaticResource
podporovánoStaticResourceExtension
DynamicResource
podporovánoDynamicResourceExtension
Binding
podporovánoBindingExtension
– popsáno v kapitole 16. Datová vazbaTemplateBinding
podporována –TemplateBindingExtension
není zahrnuta v knize
Další rozšíření značek XAML je součástí Xamarin.Forms spojení s RelativeLayout
:
ConstraintExpression
— nezabývá se v knize
Přístup ke statickým členům
Pomocí elementu x:Static
nastavte atribut na hodnotu veřejné statické vlastnosti, pole nebo člen výčtu. Member
Nastavte vlastnost na statický člen. Obvykle je jednodušší zadat x:Static
a název člena ve složených závorkách. Název Member
vlastnosti nemusí být zahrnut, pouze samotný člen. Tato běžná syntaxe se zobrazuje v ukázce SharedStatics . Samotná statická pole jsou definována AppConstants
ve třídě. Tato technika umožňuje vytvořit konstanty používané prostřednictvím programu.
S další deklarací oboru názvů XML můžete odkazovat na veřejné statické vlastnosti, pole nebo členy výčtu definované v rozhraní .NET Framework, jak je znázorněno v ukázce SystemStatics .
Slovníky prostředků
Třída VisualElement
definuje vlastnost s názvem Resources
, kterou lze nastavit na objekt typu ResourceDictionary
. V jazyce XAML můžete ukládat položky v tomto slovníku a identifikovat je pomocí atributu x:Key
. Položky uložené ve slovníku prostředků jsou sdíleny mezi všemi odkazy na položku.
StaticResource pro většinu účelů
Ve většině případů použijete StaticResource
rozšíření značek k odkazování na položku ze slovníku prostředků, jak ukazuje ukázka ResourceSharing . Můžete použít StaticResourceExtension
prvek nebo StaticResource
v rámci složených závorek:
Nezaměňujte x:Static
rozšíření značek a StaticResource
rozšíření značek.
Strom slovníků
Když analyzátor XAML narazí na objekt StaticResource
, začne prohledávat strom vizuálu pro odpovídající klíč a pak se podívá do ResourceDictionary
třídy aplikace App
. To umožňuje položkám ve slovníku prostředků hlouběji ve vizuálním stromu přepsat slovník prostředků vyšší ve vizuálním stromu. To je znázorněno v ukázce ResourceTrees .
DynamicResource pro speciální účely
Rozšíření StaticResource
značek způsobí načtení položky ze slovníku při sestavení vizuálního stromu během InitializeComponent
volání. Alternativou StaticResource
je DynamicResource
, který udržuje odkaz na klíč slovníku a aktualizuje cíl při změně položky odkazované klíčem.
Rozdíl mezi StaticResource
a je ukázaný v ukázce DynamicVsStatic.DynamicResource
Vlastnost nastavená podle DynamicResource
musí být zajištěna vazebnou vlastností, jak je popsáno v kapitole 11, Infrastruktura s možností vázání.
Rozšíření značek s menším používáním
x:Null
Pomocí rozšíření značek nastavte vlastnost na null
.
x:Type
Pomocí rozšíření značek nastavte vlastnost na objekt .NETType
.
Slouží x:Array
k definování pole. Zadejte typ členů pole nastavením vlastnosti [Type
] na x:Type
rozšíření značek.
Rozšíření vlastních značek
Vlastní rozšíření značek XAML můžete vytvořit napsáním třídy, která implementuje IMarkupExtension
rozhraní s metodou ProvideValue
.
Třída HslColorExtension
tyto požadavky splňuje. Vytvoří hodnotu typu Color
na základě hodnot vlastností s názvem H
, S
, L
a A
. Tato třída je první položkou v knihovně Xamarin.Forms s názvem Xamarin.FormsBook.Toolkit, která je vytvořena a používána v průběhu této knihy.
Ukázka CustomExtensionDemo ukazuje, jak odkazovat na tuto knihovnu a používat rozšíření vlastních značek.