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
, bool
a 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
, Android
a 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 ContentPage
nebo <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 Content
a 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: