Shrnutí v kapitole 10 Rozšíření značek XAML

Download Sample Stažení ukázky

Poznámka

Tato kniha byla publikována na 9. 9. 2016 a od té doby nebyla aktualizována. V knize je toho hodně, co zůstává cenné, ale některé materiály jsou zastaralé a některá témata už nejsou úplně správná ani úplná.

Za normálních okolností analyzátor XAML převede všechny řetězce nastavené jako hodnotu atributu na typ vlastnosti na základě standardních převodů pro základní datové typy .NET nebo odvození připojeného k vlastnosti nebo jejího typu s TypeConverterTypeConverterAttribute .

Někdy je ale vhodné nastavit atribut z jiného zdroje, například položku ve slovníku, hodnotu statické vlastnosti nebo pole nebo výpočet nějakého řazení.

Toto je úloha rozšíření značek XAML. Bez ohledu na název nejsou rozšíření značek XAML rozšířením XML. XAML je vždy právní kód XML.

Infrastruktura kódu

Rozšíření značek XAML je třída, která implementuje IMarkupExtension rozhraní . Taková třída má často na konci názvu slovo , ale obvykle se zobrazuje v Extension 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 připojení k RelativeLayout :

Přístup ke statickým členům

Pomocí elementu nastavte atribut na hodnotu veřejné statické x:Static vlastnosti, pole nebo člena výčtu. Nastavte Member vlastnost na statický člen. Obvykle je jednodušší zadat a x:Static název členu ve složených závorkách. Název vlastnosti Member nemusí být zahrnutý, pouze samotný člen. Tato běžná syntaxe je znázorněna v ukázce SharedStatics. Statická pole jsou definována ve AppConstants třídě . Tato technika umožňuje nastavit 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 , kterou můžete nastavit na objekt typu ResourcesResourceDictionary . V rámci XAML můžete ukládat položky v tomto slovníku a identifikovat je pomocí x:Key atributu . Položky uložené ve slovníku prostředků se sdílí mezi všemi odkazy na položku.

StaticResource pro většinu účelů

Ve většině případů použijete rozšíření značek k odkazování na položku ze slovníku prostředků, jak ukazuje ukázka StaticResourceStaticResource Můžete použít prvek StaticResourceExtension nebo v StaticResource rámci složených závorek:

Triple screenshot of resource sharing

Nezaměňujte rozšíření značek a x:StaticStaticResource rozšíření značek.

Strom slovníků

Když analyzátor XAML narazí na , začne hledat odpovídající klíč ve vizuálním stromu a pak vyhledá ve třídě StaticResourceResourceDictionary 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ů ve stromu vizuálu výše. To je znázorněno v ukázce ResourceTrees.

DynamicResource pro zvláštní účely

Rozšíření značek způsobí načtení položky ze slovníku při sestavení StaticResource vizuálního stromu během InitializeComponent volání. Alternativou k je , která udržuje odkaz na klíč slovníku a aktualizuje cíl, když se změní položka, na kterou StaticResourceDynamicResource odkazuje klíč.

Rozdíl mezi StaticResource a DynamicResource je ukázán v StaticResource

Vlastnost nastavená pomocí musí být zálohovaná vlastností s možností vazby, jak je popsáno v kapitole DynamicResourceDynamicResources možností vazby .

Méně používaná rozšíření značek

Pomocí rozšíření x:Null značek nastavte vlastnost na null .

Pomocí rozšíření x:Type značek nastavte vlastnost na objekt Type .NET.

Slouží x:Array k definování pole. Zadejte typ členů pole nastavením vlastnosti [ Type ] na rozšíření x:Type značek.

Rozšíření vlastních značek

Vlastní rozšíření značek XAML můžete vytvořit zápisem třídy, která implementuje IMarkupExtension rozhraní pomocí ProvideValue metody .

Soubor Book.Toolkit Xamarin.Forms / Xamarin.Forms Book(Kniha). Toolkit/HslColorExtension.cs" data-linktype="external">HslColorExtension třída splňuje tyto požadavky. Vytvoří hodnotu typu na základě hodnot vlastností s názvem , , a ColorHSLA . Tato třída je první položkou v knihovně s názvem Xamarin.FormsXamarin.Forms Xamarin.Forms Book.Toolkit" data-linktype="external"> která je vytvořena a použita v průběhu této knihy.

Ukázka CustomExtensionDemo ukazuje, jak odkazovat na tuto knihovnu a použít rozšíření vlastních značek.