Sdílet prostřednictvím


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:

Tato čtyři rozšíření značek XAML jsou podporována mnoha implementacemi XAML, včetně Xamarin.Forms:

Další rozšíření značek XAML je součástí Xamarin.Forms spojení s RelativeLayout:

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:

Trojitý snímek obrazovky se sdílením prostředků

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, La 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.