Sdílet prostřednictvím


Průvodce syntaxí XAML

Vysvětlujeme pravidla syntaxe XAML a terminologii, která popisují omezení nebo možnosti dostupné pro syntaxi XAML. Toto téma je užitečné, pokud s používáním jazyka XAML začínáte, chcete aktualizovat terminologii nebo části syntaxe, nebo vás zajímá, jak jazyk XAML funguje, a chcete další pozadí a kontext.

XAML je XML

Jazyk XAML (Extensible Application Markup Language) má základní syntaxi, která je založená na jazyce XML, a podle definice musí být platný XAML také platný XML. XAML má ale také vlastní koncepty syntaxe, které rozšiřují XML. Daná entita XML může být platná ve formátu prostého XML, ale tato syntaxe může mít jiný a přesnější význam jako XAML. Toto téma vysvětluje tyto koncepty syntaxe XAML.

Slovníky XAML

Jednou z oblastí, kde se XAML liší od většiny použití XML, je to, že XAML se obvykle nevynucuje se schématem, jako je například soubor XSD. Důvodem je, že XAML má být rozšiřitelný, to znamená "X" v akronym XAML. Po parsování XAML se očekává, že prvky a atributy, na které odkazujete v XAML, existují v některých záložní reprezentaci kódu, a to buď v základních typech definovaných modulem Windows Runtime, nebo v typech, které rozšiřují nebo jsou založeny na prostředí Windows Runtime. Dokumentace k sadě SDK někdy odkazuje na typy, které už jsou integrované v prostředí Windows Runtime a dají se použít v xaml jako slovník XAML pro prostředí Windows Runtime. Microsoft Visual Studio vám pomůže vytvořit kód platný v rámci XAML slovníku. Visual Studio může také obsahovat vlastní typy pro použití XAML, pokud je zdroj těchto typů odkazován správně v projektu. Další informace o XAML a vlastních typech najdete v tématu Obory názvů XAML a mapování oborů názvů.

Deklarace objektů

Programátoři často uvažují o objektech a členech, zatímco značkovací jazyk je chápán jako struktura prvků a atributů. V nejzákladnějším smyslu se prvek, který deklarujete v XAML značkách, stane objektem v reprezentaci objektu v běhovém prostředí. Pokud chcete pro aplikaci vytvořit objekt za běhu, deklarujete prvek XAML v kódu XAML. Objekt se vytvoří, když prostředí Windows Runtime načte XAML.

Soubor XAML má vždy přesně jeden prvek, který slouží jako jeho kořen, který deklaruje objekt, který bude koncepční kořenem některých programovacích struktur, jako je stránka, nebo objektový graf celé definice aplikace za běhu.

Z hlediska syntaxe XAML existují tři způsoby, jak deklarovat objekty v jazyce XAML:

  • Přímo pomocí syntaxe elementu objektu: Používá otevírání a zavírání značek k vytvoření instance objektu jako elementu formuláře XML. Pomocí této syntaxe můžete deklarovat kořenové objekty nebo vytvářet vnořené objekty, které nastavují hodnoty vlastností.
  • Nepřímo pomocí syntaxe atributů: Používá se vložená řetězcová hodnota, která obsahuje pokyny k vytvoření objektu. Analyzátor XAML používá tento řetězec k nastavení hodnoty vlastnosti na nově vytvořenou referenční hodnotu. Podpora je omezená na určité běžné objekty a vlastnosti.
  • Použití rozšíření značkování

To neznamená, že pro vytváření objektů ve slovníku XAML vždy máte na výběr libovolnou syntaxi. Některé objekty lze vytvořit pouze pomocí syntaxe elementu objektu. Některé objekty lze vytvořit pouze počátečním nastavením v atributu. Objekty, které lze vytvořit pomocí elementu objektu nebo syntaxe atributů, jsou ve slovníkech XAML poměrně vzácné. I v případě, že jsou možné obě formy syntaxe, bude jedna z syntaxí obecnější v rámci stylu. Existují také techniky, které můžete v XAML použít k odkazování na existující objekty místo vytváření nových hodnot. Existující objekty mohou být definovány buď v jiných oblastech XAML, nebo mohou existovat implicitně prostřednictvím určitého chování platformy a jeho aplikací nebo programovacích modelů.

Deklarace objektu pomocí syntaxe elementu objektu

Chcete-li deklarovat objekt se syntaxí elementu objektu, napíšete značky podobné tomuto: <objectName> </objectName>, kde objectName je název typu objektu, který chcete vytvořit instanci. Tady je použití elementu objektu k deklaraci objektu Canvas :

<Canvas>
</Canvas>

Pokud objekt neobsahuje jiné objekty, můžete deklarovat prvek objektu pomocí jedné samozavírací značky místo otevření/uzavření páru: <Canvas />

Containers

Mnoho objektů používaných jako prvky uživatelského rozhraní, například Plátno, může obsahovat další objekty. Někdy se označují jako kontejnery. Následující příklad ukazuje kontejner Canvas, který obsahuje jeden prvek, Obdélník.

<Canvas>
  <Rectangle />
</Canvas>

Deklarace objektu pomocí syntaxe atributů

Vzhledem k tomu, že toto chování je vázané na nastavení vlastností, budeme o tom mluvit více v nadcházejících částech.

Text inicializace

U některých objektů můžete deklarovat nové hodnoty pomocí vnitřního textu, který se používá jako inicializační hodnoty pro konstrukci. V XAML se tato technika a syntaxe označují jako inicializační text. Inicializační text se koncepčně podobá volání konstruktoru, který má parametry. Text inicializace je užitečný pro nastavení počátečních hodnot určitých struktur.

Často používáte syntax elementu objektu s inicializačním textem, pokud chcete hodnotu struktury definovanou s x:Key, aby mohla existovat ve slovníku ResourceDictionary. Můžete to udělat, pokud tuto hodnotu struktury sdílíte mezi více cílovými vlastnostmi. U některých struktur nemůžete použít syntaxi atributů k nastavení hodnot struktury: inicializační text je jediný způsob, jak vytvořit užitečný a sdíletelný cornerRadius, tloušťka, gridLength nebo barevný prostředek.

Tento zkrácený příklad používá inicializační text k určení hodnot pro Tloušťku. V tomto případě hodnoty nastaví levý i pravý na 20, horní i dolní na 10. Tento příklad ukazuje tloušťku vytvořenou jako klíčovaný prostředek a odkaz na tento prostředek. Další informace o inicializačním textu Tloušťka najdete v tématu Tloušťka.

<UserControl ...>
  <UserControl.Resources>
    <Thickness x:Key="TwentyTenThickness">20,10</Thickness>
    ....
  </UserControl.Resources>
  ...
  <Grid Margin="{StaticResource TwentyTenThickness}">
  ...
  </Grid>
</UserControl ...>

Poznámka:

Některé struktury nelze deklarovat jako elementy objektu. Inicializační text není podporovaný a nelze ho použít jako zdroje. Pokud chcete nastavit vlastnosti na tyto hodnoty v XAML, musíte použít syntaxi atributu. Tyto typy jsou: Duration, RepeatBehavior, Point, Rect a Size.

Nastavení vlastností

U objektů, které jste deklarovali, můžete nastavit vlastnosti pomocí syntaxe elementu objektu. Vlastnosti v XAML můžete nastavit několika způsoby:

  • Pomocí syntaxe atributu.
  • Pomocí syntaxe elementu vlastnosti.
  • Pomocí syntaxe elementu, kde obsah (vnitřní text nebo podřízené elementy) nastavuje vlastnost obsahu XAML objektu.
  • Pomocí syntaxe kolekce (která je obvykle implicitní).

Stejně jako u deklarace objektu tento seznam neznamená, že by každá vlastnost mohla být nastavena s každou technikou. Některé vlastnosti podporují pouze jednu z technik. Některé vlastnosti podporují více než jeden formulář; Existují například vlastnosti, které mohou používat syntaxi elementu property nebo syntaxi atributu. Co je možné, závisí jak na vlastnosti, tak na typu objektu, který vlastnost používá. V referenčních informacích k rozhraní API prostředí Windows Runtime uvidíte použití XAML, které můžete použít v části Syntaxe . Někdy existuje alternativní použití, které by fungovalo, ale bylo by více podrobné. Tato podrobná použití se nezobrazují vždy, protože se snažíme ukázat osvědčené postupy nebo reálné scénáře použití této vlastnosti v XAML. Pokyny pro syntaxi XAML jsou k dispozici v oddílech Použití XAML referenčních stránek pro vlastnosti, které lze nastavit v XAML.

Některé vlastnosti objektů nelze v XAML nastavit žádným způsobem a lze je nastavit pouze pomocí kódu. Obvykle se jedná o programové vlastnosti, které jsou vhodnější pro zpracovávání v kódu pozadí, nikoli v XAML.

Vlastnost jen pro čtení nelze nastavit v jazyce XAML. I v kódu by vlastnící typ musel podporovat nějaký jiný způsob, jak ho nastavit, jako je přetížení konstruktoru, pomocná metoda nebo podpora počítaných vlastností. Počítaná vlastnost spoléhá na hodnoty jiných nastavených vlastností a někdy událost s předdefinovaným zpracováním; tyto funkce jsou k dispozici v systému vlastností závislostí. Další informace o tom, jak jsou vlastnosti závislostí užitečné pro podporu počítaných vlastností, najdete v tématu Přehled vlastností závislostí.

Syntaxe kolekce v XAML vypadá, jako byste nastavovali vlastnost pouze pro čtení, ale ve skutečnosti tomu tak není. Viz Syntaxe kolekce dále v tomto tématu.

Nastavení vlastnosti pomocí syntaxe atributu

Nastavení hodnoty atributu je typické prostředky, kterými nastavíte hodnotu vlastnosti v jazyce revizí, například v JAZYCE XML nebo HTML. Nastavení atributů XAML se podobá nastavení hodnot atributů v JAZYCE XML. Název atributu se zadává v libovolném bodě v rámci značek za názvem elementu odděleného od názvu elementu alespoň jedním prázdným znakem. Za názvem atributu následuje znaménko rovná se. Hodnota atributu je obsažena v páru uvozovek. Uvozovky můžou být buď dvojité uvozovky, nebo jednoduché uvozovky, pokud se shodují a uzavře hodnotu. Samotná hodnota atributu musí být výrazná jako řetězec. Řetězec často obsahuje číslice, ale pro XAML jsou všechny hodnoty atributů řetězcové hodnoty, dokud se nezačne zapojit analyzátor XAML a provede převod některých základních hodnot.

Tento příklad používá syntaxi atributu pro čtyři atributy k nastavení Name, Width, Height a Fill vlastností objektu Rectangle.

<Rectangle Name="rectangle1" Width="100" Height="100" Fill="Blue" />

Nastavení vlastnosti pomocí syntaxe elementu vlastnosti

Mnoho vlastností objektu lze nastavit pomocí syntaxe elementu vlastnosti. Prvek vlastnosti vypadá takto: <vlastnost.objektu>.

Chcete-li použít syntaxi elementu vlastnosti, vytvoříte elementy vlastnosti XAML pro vlastnost, kterou chcete nastavit. Ve standardním jazyce XML by tento element byl jen považován za prvek, který má tečku v názvu. V jazyce XAML však tečka v názvu elementu identifikuje prvek jako prvek vlastnosti, přičemž vlastnost by měla být členem objektu v implementaci backing objektového modelu. Chcete-li použít syntaxi elementu vlastnosti, musí být možné zadat prvek objektu, aby bylo možné "vyplnit" značky elementu vlastnosti. Prvek vlastnosti bude mít vždy určitý obsah (jeden prvek, více prvků nebo vnitřní text); Neexistuje žádný bod v tom, že se prvek vlastnosti samozavírá.

V následující gramatiky je vlastnost název vlastnosti, kterou chcete nastavit a propertyValueAsObjectElement je jeden objekt element, který má splňovat požadavky na typ hodnoty vlastnosti.

< objekt>

< objekt.vlastnost>

propertyValueAsObjectElement

</ objekt.vlastnost>

</ objekt>

Následující příklad používá syntaxi elementu property k nastavení FillRectangle pomocí objektu SolidColorBrush. (V solidColorBrush je barva nastavena jako atribut.) Analyzovaný výsledek tohoto XAML je shodný s předchozím příkladem XAML, který nastavil Fill pomocí syntaxe atributu.

<Rectangle
  Name="rectangle1"
  Width="100" 
  Height="100"> 
  <Rectangle.Fill> 
    <SolidColorBrush Color="Blue"/> 
  </Rectangle.Fill>
</Rectangle>

Slovníky XAML a objektově orientované programování

Vlastnosti a události, které se zobrazují jako členy typu XAML v modulu Windows Runtime, se často dědí ze základních typů. Podívejte se na tento příklad: <Button Background="Blue" .../>. Vlastnost Background není okamžitě deklarovanou vlastností třídy Button . Místo toho je pozadí zděděno ze základní třídy Control . Ve skutečnosti, pokud se podíváte na referenční téma pro Button uvidíte, že seznamy členů obsahují alespoň jeden zděděný člen z každého řetězce po sobě jdoucích základních tříd: ButtonBase, Control, FrameworkElement, UIElement, DependencyObject. V seznamu Vlastnosti se všechny vlastnosti pro čtení i zápis a vlastnosti kolekce dědí ve smyslu slovníku XAML. Události (například různé události UIElement ) se také dědí.

Pokud použijete odkaz pro prostředí Windows Runtime jako pokyny pro XAML, název elementu, který je zobrazen v syntaxi nebo dokonce v ukázkovém kódu, někdy označuje typ, který původně vlastnost definuje, protože toto referenční téma je sdíleno všemi možnými typy, které ji dědí ze základní třídy. Pokud v editoru XML použijete IntelliSense sady Visual Studio pro XAML, technologie IntelliSense a její rozevírací seznamy skvěle sjednocují zděděné vlastnosti a poskytují přesný seznam atributů, které jsou k dispozici pro nastavení, jakmile začnete s objektovým prvkem pro instanci třídy.

Vlastnosti obsahu XAML

Některé typy definují jednu z jejich vlastností, aby tato vlastnost umožňovala syntaxi obsahu XAML. Pro vlastnost obsahu XAML typu můžete při specifikaci v XAML vynechat odpovídající element vlastnosti. Nebo můžete vlastnost nastavit na vnitřní textovou hodnotu tím, že tento vnitřní text zadáte přímo do značek elementů objektu vlastnícího typu. Vlastnosti obsahu XAML podporují jednoduchou syntaxi značek pro danou vlastnost a činí XAML lidštěji čitelným tím, že snižují úroveň zanoření.

Pokud je k dispozici syntaxe obsahu XAML, tato syntaxe se zobrazí v částech Syntaxe XAML pro tuto vlastnost v referenční dokumentaci k prostředí Windows Runtime. Například stránka vlastnosti Child pro Border zobrazuje syntaxi obsahu XAML místo syntaxe elementu vlastnosti pro nastavení hodnoty Border.Child objektu Border, například takto:

<Border>
  <Button .../>
</Border>

Pokud je vlastnost deklarovaná jako vlastnost obsahu XAML typ objektu nebo typ String, syntaxe obsahu XAML podporuje v podstatě vnitřní text v modelu dokumentu XML: řetězec mezi levou a pravou značkou objektu. Například stránka vlastnost Text pro TextBlock zobrazuje syntaxi obsahu XAML s vnitřní hodnotou textu pro nastavení Text, ale řetězec "Text" se v označení nikdy nezobrazí. Tady je příklad použití:

<TextBlock>Hello!</TextBlock>

Pokud vlastnost obsahu XAML existuje pro třídu, která je uvedena v referenčním tématu třídy, v části Atributy. Vyhledejte hodnotu ContentPropertyAttribute. Tento atribut používá pojmenované pole "Name". Hodnota "Name" je název vlastnosti této třídy, která je vlastnost obsahu XAML. Například na referenční stránce Border uvidíte toto: ContentProperty("Name=Child").

Jedním z důležitých pravidel syntaxe XAML, které bychom měli zmínit, je, že nemůžete intermixovat vlastnost obsahu XAML a další prvky vlastností, které jste nastavili v elementu. Vlastnost obsahu XAML musí být nastavena buď zcela před všemi prvky vlastnosti, nebo zcela za nimi. Toto je například neplatný kód XAML:

<StackPanel>
  <Button>This example</Button>
  <StackPanel.Resources>
    <SolidColorBrush x:Key="BlueBrush" Color="Blue"/>
  </StackPanel.Resources>
  <Button>... is illegal XAML</Button>
</StackPanel>

Syntaxe kolekce

Všechny dosud zobrazené syntaxe nastavují vlastnosti na jednotlivé objekty. Mnoho scénářů uživatelského rozhraní však vyžaduje, aby daný nadřazený prvek mohl mít více podřízených prvků. Například uživatelské rozhraní pro vstupní formulář potřebuje několik prvků textového pole, některé popisky a možná tlačítko Odeslat. I když byste chtěli pro přístup k těmto více prvkům použít programovací objektový model, obvykle by se jednalo o položky v jedné vlastnosti kolekce, nikoli o každou položku, která je hodnotou různých vlastností. XAML podporuje více podřízených prvků a zajišťuje typický model správy kolekcí tím, že vlastnosti používající kolekční typ bere jako implicitní a aplikuje zvláštní zpracování na všechny podřízené prvky tohoto typu.

Mnoho vlastností kolekcí je také identifikováno jako atribut obsahu XAML pro třídu. Kombinace implicitního zpracování kolekce a syntaxe obsahu XAML se často zobrazuje v typech používaných k vytváření ovládacích prvků, jako jsou panely, zobrazení nebo ovládací prvky položek. Následující příklad například ukazuje nejjednodušší možný XAML pro kompilaci dvou prvků partnerského uživatelského rozhraní v rámci StackPanel.

<StackPanel>
  <TextBlock>Hello</TextBlock>
  <TextBlock>World</TextBlock>
</StackPanel>

Syntaxe mechanismu kolekce XAML

Může se zpočátku zdát, že XAML umožňuje nastavení vlastnosti kolekce jen pro čtení. To, co tady XAML umožňuje, ve skutečnosti přidává položky do existující kolekce. Jazyk XAML a procesory XAML implementující podporu XAML spoléhají na konvenci v backingových typech kolekcí, které tuto syntaxi umožňují. Obvykle existuje záložní vlastnost, jako je indexer nebo Items vlastnost, která odkazuje na konkrétní položky kolekce. Obecně platí, že tato vlastnost není explicitní v syntaxi XAML. U kolekcí základní mechanismus analýzy XAML není vlastnost, ale metoda: konkrétně Add metoda ve většině případů. Když procesor XAML narazí na jeden nebo více elementů objektu v syntaxi kolekce XAML, každý takový objekt se nejprve vytvoří z elementu, pak se každý nový objekt přidá do obsahující kolekce voláním metody Add kolekce.

Když analyzátor XAML přidá položky do kolekce, je to logika Add metody, která určuje, zda daný element XAML je přípustnou podřízenou položkou objektu kolekce. Mnoho typů kolekcí je silně typovaných podle podkladové implementace, což znamená, že parametr metody Add očekává, že vše, co je předáno, musí odpovídat typu parametru Add.

U vlastností kolekcí buďte opatrní, když se snažíte přesně určit kolekci jako objektový prvek. Analyzátor XAML vytvoří nový objekt pokaždé, když narazí na prvek objektu. Pokud je vlastnost kolekce, kterou se pokoušíte použít, jen pro čtení, toto může vyvolat výjimku analýzy XAML. Stačí použít implicitní syntaxi kolekce a tuto výjimku neuvidíte.

Kdy použít syntaxi elementu atributu nebo vlastnosti

Všechny vlastnosti, které podporují nastavení v XAML, budou podporovat syntaxi atributu nebo elementu vlastnosti pro přímé nastavení hodnoty, ale potenciálně nepodporují zaměnitelnou syntaxi. Některé vlastnosti podporují buď syntaxi, a některé vlastnosti podporují další možnosti syntaxe, jako je vlastnost obsahu XAML. Typ syntaxe XAML podporovaná vlastností závisí na typu objektu, který vlastnost používá jako typ vlastnosti. Pokud je typ vlastnosti primitivní typ, například double (float nebo decimal), celé číslo, logická hodnota nebo řetězec, vlastnost vždy podporuje syntaxi atributu.

Syntaxi atributu můžete také použít k nastavení vlastnosti, pokud typ objektu, který použijete k nastavení této vlastnosti, lze vytvořit zpracováním řetězce. U primitiv je to vždy případ, převod typu je integrovaný do analyzátoru. Některé jiné typy objektů lze však vytvořit také pomocí řetězce určeného jako hodnota atributu, nikoli elementu objektu v elementu property. Aby to fungovalo, musí existovat základní převod typu podporovaný buď touto konkrétní vlastností, nebo obecně podporovaný pro všechny hodnoty, které tento typ vlastnosti používají. Řetězcová hodnota atributu slouží k nastavení vlastností, které jsou důležité pro inicializaci nové hodnoty objektu. Převaděč konkrétního typu může také vytvořit různé podtřídy společného typu vlastnosti v závislosti na tom, jak jednoznačně zpracovává informace v řetězci. Typy objektů, které toto chování podporují, budou mít speciální gramatiku uvedenou v oddílu syntaxe referenční dokumentace. Například syntaxe XAML pro štětce ukazuje, jak lze syntaxi atributu použít k vytvoření nové hodnoty SolidColorBrush pro libovolnou vlastnost typu Brush (a existuje mnoho vlastností štětce v prostředí Windows Runtime XAML).

Analýza logiky a pravidel XAML

Někdy je informativní číst XAML podobným způsobem, jakým ho musí číst analyzátor XAML: jako sadu řetězcových tokenů zachycených v lineárním pořadí. Analyzátor XAML musí tyto tokeny interpretovat v rámci sady pravidel, která jsou součástí definice fungování XAML.

Nastavení hodnoty atributu je typické prostředky, kterými nastavíte hodnotu vlastnosti v jazyce revizí, například v JAZYCE XML nebo HTML. V následující syntaxi je objectName objekt, který chcete vytvořit instanci, propertyName je název vlastnosti, kterou chcete nastavit pro tento objekt, a propertyValue je hodnota, která se má nastavit.

<objectName propertyName="propertyValue" .../>

-or-

<objectName propertyName="propertyValue">

...<!--element children -->

</objectName>

Obě syntaxe umožňují deklarovat objekt a nastavit vlastnost pro tento objekt. I když první příklad je jedním prvkem v kódu, existují zde skutečně diskrétní kroky s ohledem na to, jak procesor XAML parsuje tento kód.

Nejprve přítomnost elementu objektu indikuje, že je nutné vytvořit instanci nového objektu objectName . Pouze poté, co taková instance existuje, může být vlastnost propertyName instance nastavena na ni.

Dalším pravidlem XAML je, že atributy elementu musí být schopné nastavit v libovolném pořadí. Například neexistuje žádný rozdíl mezi <Rectangle Height="50" Width="100" /> a <Rectangle Width="100" Height="50" />. Pořadí, které použijete, je otázkou stylu.

Poznámka:

Návrháři XAML často propagují konvence řazení, pokud používáte jiné návrhové plochy než editor XML, ale můžete ho později volně upravovat, abyste mohli změnit pořadí atributů nebo zavést nové.

Připojené vlastnosti

XAML rozšiřuje XML přidáním elementu syntaxe známého jako připojená vlastnost. Podobně jako syntaxe elementu vlastnosti obsahuje připojená syntaxe vlastnosti tečku a tečka obsahuje speciální význam pro parsování XAML. Konkrétně tečka odděluje poskytovatele přiřazené vlastnosti a název vlastnosti.

V XAML nastavíte připojené vlastnosti pomocí syntaxe AttachedPropertyProvider. PropertyName Tady je příklad nastavení připojené vlastnosti Canvas.Left v XAML:

<Canvas>
  <Button Canvas.Left="50">Hello</Button>
</Canvas>

Připojenou vlastnost můžete nastavit u elementů, které nemají vlastnost tohoto názvu v záložním typu, a tímto způsobem fungují trochu jako globální vlastnost nebo atribut definovaný jiným oborem názvů XML, jako je xml:space atribut.

V prostředí Windows Runtime XAML uvidíte připojené vlastnosti, které podporují tyto scénáře:

Další informace najdete v tématu Přehled připojených vlastností.

Literály "{" hodnoty

Vzhledem k tomu, že otevřená složená závorka { je začátkem sekvence rozšíření značek, použijete únikovou sekvenci k určení literální řetězcové hodnoty, která začíná s {. Sekvence úniku je "{}". Pokud chcete například zadat řetězcovou hodnotu, která je jedinou levou složenou závorkou, zadejte hodnotu atributu jako {{}. Alternativní uvozovky (například ' uvnitř hodnoty atributu oddělené "") můžete použít k poskytnutí hodnoty "{" jako řetězce.

Poznámka:

"\} funguje také v případě, že se nachází uvnitř atributu v uvozovkách."  

Hodnoty výčtu

Mnoho vlastností v rozhraní API prostředí Windows Runtime používá výčty jako hodnoty. Pokud je člen vlastností pro čtení i zápis, můžete tuto vlastnost nastavit zadáním hodnoty atributu. Určíte, která hodnota výčtu se má použít jako hodnota vlastnosti pomocí nekvalifikovaného názvu konstanty . Tady je příklad nastavení UIElement.Visibility v XAML: <Button Visibility="Visible"/>. Zde je "Visible" jako řetězec přímo mapován na pojmenovanou konstantu výčtu Visibility, Visible.

  • Nepoužívejte kvalifikovaný formulář, nebude fungovat. Toto je například neplatné XAML: <Button Visibility="Visibility.Visible"/>.
  • Nepoužívejte hodnotu konstanty. Jinými slovy, nespoléhejte na celočíselnou hodnotu výčtu, která je explicitně nebo implicitně v závislosti na tom, jak byl výčet definován. I když se může zdát, že funguje, je to špatný postup v XAML nebo v kódu, protože spoléháte na to, co může být přechodným podrobnostem implementace. Například, nedělejte toto: <Button Visibility="1"/>.

Poznámka:

V referenčních tématech pro rozhraní API, která používají XAML a výčty, klikněte na odkaz na typ výčtu v části Hodnota vlastnosti, Syntaxe. Odkazuje na stránku výčtu, kde můžete zjistit pojmenované konstanty pro tento výčet.

Výčty můžou být označené příznakem, což znamená, že jsou přiřazeny příznakem FlagsAttribute. Pokud potřebujete zadat kombinaci hodnot pro výčet s příznaky jako hodnotu atributu XAML, použijte název každé konstanty výčtu, oddělený čárkou (,) a bez mezer. Atributy se znaménkem nejsou ve slovníku XAML modulu Windows Runtime běžné, ale ManipulationModes je příkladem, kdy je podporováno nastavení hodnoty výčtu se znaménkem v jazyce XAML.

Rozhraní v XAML

Ve výjimečných případech uvidíte syntaxi XAML, ve které vlastnost má typ rozhraní. V systému typů XAML je typ, který implementuje toto rozhraní, přijatelný jako hodnota při analýze. Musí existovat vytvořená instance takového typu, která bude sloužit jako hodnota. Zobrazí se rozhraní použité jako typ v syntaxi XAML pro vlastnosti Command a CommandParameterButtonBase. Tyto vlastnosti podporují vzory návrhu modeluView-ViewModel (MVVM), kde rozhraní ICommand je kontrakt pro způsob interakce zobrazení a modelů.

Zástupné konvence XAML v referenčních informacích k prostředí Windows Runtime

Pokud jste prozkoumali některou z referenčních témat v části Syntaxe pro rozhraní API prostředí Windows Runtime, která můžou používat XAML, pravděpodobně jste viděli, že syntaxe obsahuje poměrně několik zástupných symbolů. Syntaxe XAML se liší od syntaxe komponent jazyka C#, Microsoft Visual Basic nebo Visual C++ (C++/CX), protože syntaxe XAML je syntaxe použití. Naznačuje konečné použití ve vašich vlastních souborech XAML, ale bez příliš preskriptivního popisování hodnot, které můžete použít. Použití tedy obvykle popisuje typ gramatiky, který kombinuje literály a zástupné symboly a definuje některé zástupné symboly v části Hodnoty XAML .

Když se v syntaxi XAML pro vlastnost zobrazí názvy typů nebo názvů elementů, zobrazí se název pro typ, který původně definuje vlastnost. Windows Runtime XAML však podporuje model dědičnosti tříd pro třídy založené na DependencyObject. Proto můžete často použít atribut třídy, která není doslova definující třídu, ale odvozuje se od třídy, která poprvé definovala vlastnost/atribut. Viditelnost můžete například nastavit jako atribut pro libovolnou odvozenou třídu UIElement pomocí hluboké dědičnosti. Například: <Button Visibility="Visible" />. Proto nevezměte název elementu zobrazený v žádné syntaxi použití XAML příliš doslova; Syntaxe může být proveditelná pro prvky představující danou třídu a také prvky, které představují odvozenou třídu. V případech, kdy je vzácné nebo nemožné, aby typ zobrazený jako definující prvek byl použit ve skutečné situaci, je tento název typu v syntaxi záměrně uveden malými písmeny. Například syntaxe, kterou vidíte pro UIElement.Visibility , je:

<uiElement Visibility="Visible"/>
-or-
<uiElement Visibility="Collapsed"/>

Mnoho oddílů syntaxe XAML obsahuje zástupné symboly v části Využití, které jsou pak definovány v oddílu Hodnoty XAML , který je přímo pod oddílem Syntaxe .

Oddíly použití XAML také používají různé generalizované zástupné symboly. Tyto zástupné symboly se nedefinují pokaždé v hodnotách XAML, protože snadno odhadnete nebo časem zjistíte, co představují. Myslíme si, že většinu čtenářů by unavovalo, kdyby je znovu a znovu vídali v hodnotách XAML, a proto jsme je v definicích vynechali. Tady je seznam některých z těchto zástupných symbolů a jejich význam obecně:

  • object: teoreticky jakákoli hodnota objektu, ale často je prakticky omezena na určité typy objektů, jako je volba typu řetězec nebo objekt, a měli byste zkontrolovat Poznámky na referenční stránce další informace.
  • objectproperty: objectproperty se používá v případech, kdy je syntaxe typu ukázána tak, že může být použita jako hodnota atributu pro mnoho vlastností. Například použití atributu Xaml zobrazené pro Brush zahrnuje: <objectproperty="předdefinovanýNázevBarvy"/>
  • eventhandler: Zobrazí se jako hodnota atributu pro každou syntaxi XAML zobrazenou pro atribut události. Tady zadáte název funkce pro obsluhu události. Tato funkce musí být definována v kódu stránky XAML. Na úrovni programování musí tato funkce odpovídat podpisu delegáta události, kterou zpracováváte, nebo se kód aplikace nezkompiluje. Ale to je opravdu programovací aspekt, ne aspekt XAML, takže se nepokoušíme naznačovat nic o typu delegáta v syntaxi XAML. Pokud chcete vědět, který delegát byste měli implementovat pro událost, je to v části Informace o události v referenčním tématu události v řádku tabulky s popiskem Delegát.
  • enumMemberName: zobrazený v syntaxi atributu pro všechny výčty. Existuje podobný zástupný symbol pro vlastnosti, které používají hodnotu výčtu, ale obvykle předchází zástupnému symbolu s náznakem názvu výčtu. Například syntaxe zobrazená pro FrameworkElement.FlowDirection je <frameworkElementFlowDirection="flowDirectionMemberName"/>. Jestliže se nacházíte na stránce s odkazem na vlastnosti, klikněte na odkaz na typ výčtu, který se zobrazí v části Hodnota vlastnosti vedle textu Typ:. Pro hodnotu atributu vlastnosti, která používá tento výčet, můžete použít libovolný řetězec uvedený ve sloupci Člen v seznamu Člen .
  • double, int, string, bool: Jedná se o primitivní typy známé jazykem XAML. Pokud programujete pomocí jazyka C# nebo Visual Basic, tyto typy jsou promítnuty na ekvivalentní typy Microsoft .NET, jako jsou Double, Int32, String a Boolean, a při práci s hodnotami definovanými xaml v kódu .NET můžete na těchto typech .NET použít libovolné členy. Pokud programujete pomocí C++/CX, použijete primitivní typy jazyka C++, ale můžete také zvážit tyto ekvivalenty typů definovaných oborem názvů platformy , například Platform::String. V některých případech platí další omezení hodnoty pro konkrétní vlastnosti. Ty se ale obvykle zobrazí v oddílu Hodnoty vlastnosti nebo Poznámky, a ne v oddílu XAML, protože všechna taková omezení platí jak pro použití kódu, tak pro použití XAML.

Tipy a triky, poznámky ke stylu

  • Rozšíření značek jsou obecně popsaná v hlavním přehledu XAML. Rozšíření značek XAML, které nejvíce ovlivňuje pokyny uvedené v tomto tématu, je rozšíření značek StaticResource (a související ThemeResource). Funkce rozšíření značek StaticResource umožňuje převádět váš XAML do opakovaně použitelných prostředků, které pocházejí ze XAML slovníku prostředků. Téměř vždy definujete šablony ovládacích prvků a související styly ve službě ResourceDictionary. V ResourceDictionaryu často definujete menší části definice šablony ovládacího prvku nebo stylu specifického pro aplikaci, například SolidColorBrush pro barvu, kterou vaše aplikace používá více než jednou pro různé části uživatelského rozhraní. Pomocí StaticResource lze nyní nastavit libovolnou vlastnost, která by jinak vyžadovala použití elementu vlastnosti k nastavení v syntaxi atributu. Výhody faktoringu XAML pro opakované použití ale překračují jenom zjednodušení syntaxe na úrovni stránky. Další informace najdete v tématu ResourceDictionary a odkazy na prostředky XAML.
  • V příkladech XAML uvidíte několik různých konvencí, jak se používají prázdné znaky a spojnicové kanály. Konkrétně existují různé konvence pro rozdělení prvků objektů, které mají mnoho různých atributů. To je jen věc stylu. Editor XML sady Visual Studio použije při úpravách XAML některá výchozí pravidla stylu, ale v nastavení je můžete změnit. Existuje malý počet případů, kdy je prázdné znaky v souboru XAML považovány za významné; Další informace najdete v tématu XAML a prázdné znaky.