Sdílet prostřednictvím


Shrnutí kapitoly 7. XAML vs. kód

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á.

Xamarin.Forms podporuje jazyk značek založený na jazyce XML, který se nazývá Extensible Application Markup Language nebo XAML (vyslovuje se "zammel"). XAML nabízí alternativu jazyka C# při definování rozložení uživatelského rozhraní Xamarin.Forms aplikace a definování vazeb mezi prvky uživatelského rozhraní a podkladovými daty.

Vlastnosti a atributy

Xamarin.Forms třídy a struktury se stanou elementy XML v XAML a vlastnosti těchto tříd a struktur se stanou atributy XML. Aby bylo možné vytvořit instanci v XAML, třída musí mít obecně veřejný konstruktor bez parametrů. Všechny vlastnosti nastavené v XAML musí mít veřejné set přístupové objekty.

Pro vlastnosti základních datových typů (string, double, boola tak dále), analyzátor XAML používá standardní TryParse metody k převodu nastavení atributů na tyto typy. Analyzátor XAML může také snadno zpracovat typy výčtu a může kombinovat členy výčtu, pokud je typ výčtu označen atributem Flags .

Pro usnadnění analyzátoru XAML mohou složitější typy (nebo vlastnosti těchto typů) zahrnovat TypeConverterAttribute třídu, která identifikuje třídu, ze TypeConverter které podporuje převod z řetězcových hodnot na tyto typy. ColorTypeConverter Například převede názvy barev a řetězce, například "#rrggbb", na Color hodnoty.

Syntaxe elementů vlastností

V JAZYCE XAML jsou třídy a objekty vytvořené z nich vyjádřeny jako elementy XML. Tyto prvky se označují jako objektové prvky. Většina vlastností těchto objektů se vyjadřuje jako atributy XML. Tyto atributy se nazývají atributy vlastností.

Někdy musí být vlastnost nastavena na objekt, který nelze vyjádřit jako jednoduchý řetězec. V takovém případě XAML podporuje značku nazvanou element property, který se skládá z názvu třídy a názvu vlastnosti oddělené tečkou. Prvek objektu se pak může objevit v páru značek property-element.

Přidání stránky XAML do projektu

Xamarin.Forms Knihovna přenosných tříd může při prvním vytvoření obsahovat stránku XAML nebo můžete přidat stránku XAML do existujícího projektu. V dialogovém okně pro přidání nové položky zvolte položku odkazující na stránku XAML nebo ContentPage XAML. (Ne ContentView.)

Poznámka:

Možnosti sady Visual Studio se od psaní této kapitoly změnily.

Vytvoří se dva soubory: soubor XAML s příponou souboru .xaml a soubor C# s příponou .xaml.cs. Soubor C# se často označuje jako kód souboru XAML. Soubor s kódem je částečná definice třídy, která je odvozena z ContentPage. V době sestavení se xaml analyzuje a pro stejnou třídu se vygeneruje další definice částečné třídy. Tato vygenerovaná třída obsahuje metodu, InitializeComponent která je volána z konstruktoru souboru kódu za kódem.

Během běhu byly na závěr InitializeComponent volání vytvořeny všechny prvky souboru XAML a inicializovány stejně jako kdyby byly vytvořeny v kódu jazyka C#.

Kořenový prvek v souboru XAML je ContentPage. Kořenová značka obsahuje alespoň dvě deklarace oboru názvů XML, jednu pro Xamarin.Forms prvky a druhou definující předponu x pro elementy a atributy vnitřní pro všechny implementace XAML. Kořenová značka obsahuje x:Class také atribut, který označuje obor názvů a název třídy, která je odvozena od ContentPage. To odpovídá názvu oboru názvů a třídy v souboru kódu za kódem.

Kombinace XAML a kódu je ukázaná ukázkou CodePlusXaml .

Kompilátor XAML

Xamarin.Forms má kompilátor XAML, ale jeho použití je volitelné na základě použití XamlCompilationAttribute. Pokud xaml není zkompilován, xaml se parsuje v době sestavení a soubor XAML se vloží do pcL, kde se také parsuje za běhu. Pokud je XAML zkompilován, proces sestavení převede XAML na binární formulář a zpracování modulu runtime je efektivnější.

Specificita platformy v souboru XAML

V jazyce XAML lze třídu OnPlatform použít k výběru kódu závislého na platformě. Toto je obecná třída a musí být vytvořena s atributem x:TypeArguments , který odpovídá cílovému typu. Třída OnIdiom je podobná, ale používá se mnohem méně často.

Použití OnPlatform se od publikování knihy změnilo. Původně se používal ve spojení s vlastnostmi pojmenovanými iOS, Androida WinPhone. Nyní se používá s podřízenými On objekty. Platform Nastavte vlastnost na řetězec konzistentní s veřejnými const poli Device třídy. Value Nastavte vlastnost na hodnotu konzistentní s atributem x:TypeArguments značkyOnPlatform.

OnPlatform demonstruje se v ukázce ScaryColorList , tzv. protože obsahuje bloky téměř identických XAML. Existence této repetitní revize naznačuje, že techniky by měly být k dispozici pro jeho snížení.

Atributy vlastnosti obsahu

Některé prvky vlastností se vyskytují poměrně často, například <ContentPage.Content> značka na kořenovém prvku objektu ContentPagenebo <StackLayout.Children> značka, která ohraničuje podřízené položky StackLayout.

Každá třída může identifikovat jednu vlastnost se ContentPropertyAttribute třídou. Pro tuto vlastnost nejsou značky elementu property povinné. ContentPage definuje jeho vlastnost obsahu jako Contenta Layout<T> (třída, ze které StackLayout je odvozen) definuje jeho vlastnost obsahu jako Children. Tyto značky elementů vlastností nejsou povinné.

Prvek vlastnosti Label je Text.

Formátovaný text

Ukázka TextVariations obsahuje několik příkladů nastavení Text a FormattedText vlastností .Label V jazyce XAML Span se objekty zobrazují jako podřízené položky objektu FormattedString .

Pokud je víceřádkový řetězec nastaven na Text vlastnost, koncové znaky řádku se převedou na znaky mezery, ale koncové znaky řádku se zachovají, když se víceřádkový řetězec zobrazí jako obsah Label nebo Label.Text značky:

Trojitý snímek obrazovky se sdílením variant textu