Megosztás:


XAML szintaxisa – útmutató

Ismertetjük az XAML szintaxis szabályait és az XAML szintaxishoz elérhető korlátozásokat vagy választási lehetőségeket leíró terminológiát. Ez a témakör akkor hasznos, ha még nem használta az XAML nyelvet, frissíteni szeretné a terminológiát vagy a szintaxis egyes részeit, vagy kíváncsi az XAML nyelv működésére, és több hátteret és kontextust szeretne.

Az XAML az XML.

Az extensible Application Markup Language (XAML) egy XML-alapú alapszintaxissal rendelkezik, és definíció szerint az érvényes XAML-nek érvényes XML-nek kell lennie. Az XAML-nek azonban saját szintaxisfogalmai is vannak, amelyek kiterjesztik az XML-t. Előfordulhat, hogy egy adott XML-entitás egyszerű XML-ben érvényes, de ez a szintaxis XAML-ként más és teljesebb jelentéssel rendelkezhet. Ez a témakör ezeket az XAML szintaxisfogalmakat ismerteti.

XAML-vokabulárok

Az XAML abban különbözik a legtöbb XML-használattól, hogy általában nem alkalmaznak rá sémafájlt, például XSD-t. Ennek az az oka, hogy az XAML bővíthető, ezt jelenti az XAML betűszó "X" betűszója. Az XAML elemzése után az XAML-ben hivatkozott elemek és attribútumok várhatóan valamilyen háttérkód-reprezentációban léteznek, akár a Windows futtatókörnyezet által meghatározott alapvető típusokban, akár a Windows futtatókörnyezetet kiterjesztő vagy azon alapuló típusokban. Az SDK dokumentációja néha a Windows futtatókörnyezetben már beépített típusokra hivatkozik, és az XAML-ben a Windows futtatókörnyezet XAML-szókincseként használható. A Microsoft Visual Studio segít az XAML-szókincsben érvényes korrektúrák előállításában. A Visual Studio az XAML-használathoz tartozó egyéni típusokat is belefoglalhatja, amennyiben az ilyen típusok forrására megfelelően hivatkozik a projekt. További információ az XAML-ről és az egyéni típusokról: XAML-névterek és névtérleképezés.

Objektumok deklarálása

A programozók gyakran objektumokban és tagokban gondolkodnak, míg a jelölőnyelvet elemként és attribútumként kell felfogni. A legalapvetőbb értelemben az XAML-jelölőben deklarált elem objektummá válik egy háttér futtatókörnyezeti objektumábrázolásban. Ha futásidejű objektumot szeretne létrehozni az alkalmazáshoz, deklaráljon egy XAML-elemet az XAML-jelölőben. Az objektum akkor jön létre, amikor a Windows futtatókörnyezet betölti az XAML-t.

Az XAML-fájloknak mindig pontosan egy elem szolgál a gyökérként, amely deklarál egy objektumot, amely valamilyen programozási struktúra fogalmi gyökere lesz, például egy lap, vagy egy alkalmazás teljes futásidejű definíciójának objektumgráfja.

Az XAML szintaxis szempontjából három módon deklarálhat objektumokat az XAML-ben:

  • Közvetlenül az objektumelem szintaxisának használatával: Ez nyitó és záró címkéket használ az objektumok XML-űrlapelemként való példányosításához. Ez a szintaxis a gyökérobjektumok deklarálására vagy a tulajdonságértékeket beadó beágyazott objektumok létrehozására használható.
  • Indirekt módon, attribútumszintaxis használatával: Ez egy beágyazott sztringértéket használ, amely utasításokat tartalmaz az objektumok létrehozásához. Az XAML-elemző ezzel a sztringgel állítja be egy tulajdonság értékét egy újonnan létrehozott referenciaértékre. A támogatás bizonyos gyakori objektumokra és tulajdonságokra korlátozódik.
  • Korrektúra-bővítmény használata.

Ez nem jelenti azt, hogy mindig választhat bármilyen szintaxist az objektumlétrehozáshoz egy XAML-szókincsben. Egyes objektumok csak objektumelem-szintaxissal hozhatók létre. Egyes objektumok csak egy attribútum kezdeti beállításával hozhatók létre. Valójában az objektumelemekkel vagy attribútumszintaxisokkal létrehozható objektumok viszonylag ritkák az XAML-beli vokabulárokban. Még ha mindkét szintaxisforma lehetséges is, az egyik szintaxis stílus szempontjából gyakoribb lesz. Az XAML-ben is léteznek olyan technikák, amelyekkel meglévő objektumokra hivatkozhat új értékek létrehozása helyett. A meglévő objektumok definiálhatók az XAML más területein, vagy implicit módon létezhetnek a platform és alkalmazás- vagy programozási modelljeinek bizonyos viselkedésén keresztül.

Objektum deklarálása objektumelem szintaxisával

Objektumelem-szintaxissal rendelkező objektum deklarálásához a következőhöz hasonló címkéket kell írnia: <objectName> </objectName>, ahol az objectName a példányozni kívánt objektum típusneve. Az objektumelemek használata vászonobjektum deklarálásához:

<Canvas>
</Canvas>

Ha az objektum nem tartalmaz más objektumokat, az objektumelemet úgy deklarálhatja, hogy egy önzáró címkét használ egy nyitó/záró pár helyett: <Canvas />

Containers

Számos, felhasználói felületi elemként (például vászonként) használt objektum tartalmazhat más objektumokat. Ezeket néha tárolóknak is nevezik. Az alábbi példa egy vászontárolót mutat be, amely egy elemet, egy téglalapot tartalmaz.

<Canvas>
  <Rectangle />
</Canvas>

Objektum deklarálása attribútumszintaxis használatával

Mivel ez a viselkedés a tulajdonságbeállításhoz van kötve, erről bővebben a következő szakaszokban lesz szó.

Inicializálás szövege

Egyes objektumok esetében új értékeket deklarálhat az építés inicializálási értékeiként használt belső szöveg használatával. Az XAML-ben ezt a technikát és szintaxist inicializálási szövegnek nevezzük. Elméletileg az inicializálás szövege hasonló a paraméterekkel rendelkező konstruktor meghívásához. Az inicializálási szöveg bizonyos struktúrák kezdeti értékeinek beállításához hasznos.

Gyakran használja az objektumelem szintaxisát inicializálási szöveggel együtt, ha olyan struktúraértéket szeretne, amely x:Kulcs-sal rendelkezik, így egy ResourceDictionary-ban létezhet. Ezt akkor teheti meg, ha ezt a struktúraértéket több céltulajdonság között osztja meg. Egyes struktúrák esetében nem használhat attribútumszintaxist a struktúra értékeinek beállításához: az inicializálási szöveg az egyetlen módja annak, hogy hasznos és megosztható CornerRadius, Thickness, GridLength vagy Color erőforrást állítson elő.

Ez a rövidített példa inicializálási szöveg használatával adja meg a vastagság értékeit, ebben az esetben a bal és a jobb oldali értékeket 20-ra, a Felül és a Lent értéket pedig 10-re. Ez a példa a kulcsos erőforrásként létrehozott Vastagságot , majd az adott erőforrásra mutató hivatkozást mutatja be. A Vastagság inicializálási szövegéről további információt a Vastagság című témakörben talál.

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

Megjegyzés:

Egyes struktúrák nem deklarálhatók objektumelemként. Az inicializálási szöveg nem támogatott, és nem használható erőforrásokként. Az XAML-ben attribútumszintaxis használatával állíthat be tulajdonságokat ezekhez az értékekhez. Ezek a típusok: Duration, RepeatBehavior, Point, Rect és Size.

Tulajdonságok beállítása

A deklarált objektumok tulajdonságait az objektumelem szintaxisával állíthatja be. Az XAML-ben többféleképpen is beállíthat tulajdonságokat:

  • Attribútumszintaxis használatával.
  • Tulajdonságelem szintaxisával.
  • Elemszintaxis használatával, ahol a tartalom (belső szöveg vagy gyermekelemek) egy objektum XAML tartalomtulajdonságát állítja be.
  • Gyűjteményszintaxis használatával (amely általában az implicit gyűjtemény szintaxisa).

Az objektumdeklarációhoz hasonlóan ez a lista sem jelenti azt, hogy bármilyen tulajdonság beállítható az egyes technikákkal. Egyes tulajdonságok csak az egyik technikát támogatják. Egyes tulajdonságok több formátumot is támogatnak; például vannak tulajdonságok, amelyek a tulajdonságelem szintaxisát vagy attribútumszintaxisát használhatják. A lehetséges lehetőségek mind a tulajdonságtól, mind a tulajdonság által használt objektumtípustól függnek. A Windows Runtime API referenciájában láthatja a Szintaxis szakaszban használható XAML-használatokat. Néha van egy alternatív használat, amely működne, de részletesebb lenne. Ezek a részletes használatok nem mindig jelennek meg, mert megpróbáljuk bemutatni a tulajdonság XAML-ben való használatára vonatkozó ajánlott eljárásokat vagy valós forgatókönyveket. Az XAML szintaxissal kapcsolatos útmutatást a referencialapok XAML-használati szakaszaiban találja az XAML-ben beállítható tulajdonságokhoz.

Az objektumok egyes tulajdonságai semmilyen módon nem állíthatók be az XAML-ben, és csak kóddal állíthatók be. Ezek általában olyan tulajdonságok, amelyek jobban megfelelnek a mögöttes kódban való munkának, nem pedig az XAML-ben.

Írásvédett tulajdonság nem állítható be az XAML-ben. A tulajdonos típusnak még kódban is támogatnia kell a beállítás más módját, például a konstruktor túlterhelését, a segédmetódust vagy a számított tulajdonság támogatását. A számított tulajdonság más settable tulajdonságok értékeire, valamint néha beépített kezeléssel rendelkező eseményre támaszkodik; ezek a funkciók elérhetők a függőségi tulajdonságrendszerben. További információ arról, hogy a függőségi tulajdonságok hogyan használhatók a számított tulajdonságok támogatásához: Függőségi tulajdonságok áttekintése.

Az XAML gyűjteményszintaxisa azt a látszatot kelti, hogy írásvédett tulajdonságot állítunk be, viszont ez nem így van. A témakör későbbi részében lásd a "Gyűjtemény szintaxisa" című témakört.

Tulajdonság beállítása attribútumszintaxis használatával

Az attribútumérték beállítása az a tipikus eszköz, amellyel tulajdonságértéket állít be egy korrektúranyelven, például XML-ben vagy HTML-ben. Az XAML-attribútumok beállítása hasonló az XML-attribútumértékek beállításához. Az attribútum neve az elem nevét követő címkéken belül bármikor meg van adva, és legalább egy szóköz választja el az elem nevétől. Az attribútum nevét egyenlőségjel követi. Az attribútum értéke egy idézőjelpáron belül található. Az idézőjelek lehetnek dupla vagy egyszeri idézőjelek, amennyiben megegyeznek, és az értéket belefoglalják. Az attribútumértéknek sztringként kell kifejezhetőnek lennie. A sztring gyakran tartalmaz számokat, de az XAML-ben az összes attribútumérték sztringérték, amíg az XAML-elemző nem vesz részt, és nem végez alapvető értékkonvertálást.

Ez a példa négy attribútum attribútumszintaxisával állítja be egy téglalap objektum nevét, szélességét, magasságát és kitöltési tulajdonságait.

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

Tulajdonság beállítása tulajdonságelem szintaxisával

Egy objektum számos tulajdonsága a tulajdonságelem szintaxisával állítható be. A tulajdonságelem így néz ki: <objektumtulajdonság.>.

A tulajdonságelem szintaxisának használatához XAML tulajdonságelemeket kell létrehoznia a beállítani kívánt tulajdonsághoz. A standard XML-ben ezt az elemet csak olyan elemnek tekintjük, amelynek nevében pont szerepel. Az XAML-ben azonban az elemnévben lévő pont tulajdonságelemként azonosítja az elemet, és a tulajdonság várhatóan az objektum tagja lesz egy háttérobjektum-modell implementációjában. A tulajdonságelem szintaxisának használatához meg kell adni egy objektumelemet a tulajdonságelem címkéinek "kitöltéséhez". A tulajdonságelemek mindig tartalmaznak valamilyen tartalmat (egyetlen elem, több elem vagy belső szöveg); Nincs értelme az önzáró tulajdonságelemnek.

A következő nyelvtanban a tulajdonság a beállítani kívánt tulajdonság neve, a PropertyValueAsObjectElement pedig egyetlen objektumelem, amely várhatóan megfelel a tulajdonság értéktípus-követelményeinek.

< tárgy>

< tárgy.tulajdonság>

propertyValueAsObjectElement

</ objektum.tulajdonság>

</ tárgy>

Az alábbi példa tulajdonságelemszintaxissal állítja be a TéglalapkitöltésétSolidColorBrush objektumelemekkel. (A SolidColorBrushban a Szín attribútumként van beállítva.) Ennek az XAML-nek az elemzési eredménye megegyezik az előző XAML-példával, amely a Fill függvényt attribútumszintaxissal állította be.

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

XAML-vokabulárok és objektumorientált programozás

A Windows Runtime XAML típusú XAML-tagokként megjelenő tulajdonságok és események gyakran öröklődnek az alaptípusoktól. Vegyük például a következőt: <Button Background="Blue" .../>. A Háttér tulajdonság nem azonnal deklarált tulajdonság a Gomb osztályban. Ehelyett a háttér az alap vezérlőosztálytól öröklődik. Valójában, ha megtekinti a Button referenciatémakörét, látni fogja, hogy a tagok listái legalább egy örökölt tagot tartalmaznak az egymást követő alaposztályok láncából: ButtonBase, Control, FrameworkElement, UIElement, DependencyObject. A Tulajdonságok listában az összes olvasási-írási tulajdonság és gyűjteménytulajdonság XAML-szókészlet-értelemben öröklődik. Az események (például a különböző UIElement-események ) is öröklődnek.

Ha az XAML-útmutatóhoz a Windows futtatókörnyezet referenciáját használja, akkor a szintaxisban vagy a példakódban megjelenített elemnév néha az eredetileg definiált tulajdonságtípushoz tartozik, mivel a referenciatémakört az összes lehetséges típus megosztja, amely örökli azt egy alaposztályból. Ha a Visual Studio IntelliSense szolgáltatását XAML-hez használja az XML-szerkesztőben, az IntelliSense és a legördülő listák nagyszerűen összesítik az öröklést, és pontos listát nyújtanak azokról az attribútumokról, amelyek beállíthatók, miután elkezdte egy osztálypéldány objektumelemét.

XAML-tartalom tulajdonságai

Egyes típusok olyan tulajdonságokat határoznak meg, amelyek lehetővé teszik az XAML-tartalomszintaxis létrehozását. Egy típusú XAML-tartalomtulajdonság esetében kihagyhatja a tulajdonság tulajdonságelemét, amikor xAML-ben adja meg. Azt is megteheti, hogy a tulajdonságot egy belső szöveges értékre állítja be úgy, hogy a belső szöveget közvetlenül a tulajdonostípus objektumelem-címkéi között adja meg. Az XAML tartalomtulajdonságok támogatják a tulajdonság egyértelmű jelölőszintaxisát, és a beágyazás csökkentésével az XAML-t emberibbé, olvashatóbbá teszik.

Ha elérhető XAML-tartalomszintaxis, a szintaxis a Windows futtatókörnyezet referenciadokumentációjának Szintaxis XAML szakaszában jelenik meg. A Gyermek tulajdonságlap a Szegély számára például az XAML tartalomszintaxist mutatja a tulajdonságelem szintaxisa helyett, hogy beállítsa a Border.Child egyobjektumos szegély értékét, például így:

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

Ha az XAML tartalomtulajdonságként deklarált tulajdonság az Objektumtípus vagy a Sztring típus, akkor az XAML tartalomszintaxisa támogatja az XML-dokumentummodell alapvetően belső szövegét: a nyitó és a záró objektumcímkék közötti sztringet. A TextBlock Szöveg tulajdonságlapján például olyan XAML-tartalomszintaxis látható, amely belső szöveges értékkel rendelkezik a Szöveg beállításához, de a "Text" sztring soha nem jelenik meg a korrektúrában. Íme egy példa a használatra:

<TextBlock>Hello!</TextBlock>

Ha XAML-tartalomtulajdonság létezik egy osztályhoz, az az osztály referenciatémakörében, az "Attribútumok" szakaszban található. Keresse meg a ContentPropertyAttribute értékét. Ez az attribútum egy névvel ellátott "Name" mezőt használ. "A 'Név' értéke annak az osztálynak a tulajdonságnevét adja meg, amelyik az XAML tartalomtulajdonság." A Szegély hivatkozási lapon például a következő látható: ContentProperty("Name=Child").

Az egyik fontos XAML-szintaxisi szabály, amelyet meg kell említenünk, hogy az XAML tartalomtulajdonság és az elemen beállított egyéb tulajdonságelemek nem adhatók össze. Az XAML tartalomtulajdonságot teljes egészében a tulajdonságelemek előtt vagy teljes egészében utána kell beállítani. Ez például érvénytelen XAML:

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

Gyűjtemény szintaxisa

Az eddig bemutatott összes szintaxis egyetlen objektumra állítja be a tulajdonságokat. Azonban számos felhasználói felületi forgatókönyv megköveteli, hogy egy adott szülőelem több gyermekelemet is tartalmazhat. Egy beviteli űrlap felhasználói felületének például több szövegdobozelemre, néhány címkére és esetleg a "Küldés" gombra van szüksége. Mégis, ha egy programozási objektummodellt használna a több elem eléréséhez, általában egyetlen gyűjteménytulajdonság elemei lennének, nem pedig minden elem különböző tulajdonságok értéke. Az XAML több gyermekelemet támogat, valamint támogatja a tipikus háttérgyűjteményi modellt azáltal, hogy implicitként kezeli a gyűjteménytípust használó tulajdonságokat, és speciális kezelést végez a gyűjteménytípus bármely gyermekeleméhez.

Számos gyűjteménytulajdonság az osztály XAML-tartalomtulajdonságaként is azonosítható. Az implicit gyűjteményfeldolgozás és az XAML-tartalomszintaxis kombinációját gyakran használják a vezérlő-összeállításhoz használt típusok, például a panelek, nézetek vagy elemek vezérlői. Az alábbi példa például a legegyszerűbb XAML-t mutatja be két társ felhasználói felületi elem összeállításához a StackPanelben.

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

Az XAML-gyűjtemény szintaxisának mechanizmusa

Elsőre úgy tűnhet, hogy az XAML engedélyezi az írásvédett gyűjtemény tulajdonságának "beállítását". A valóságban az XAML lehetővé teszi, hogy elemeket adjon hozzá egy meglévő gyűjteményhez. Az XAML-támogatást megvalósító XAML-nyelvek és XAML-processzorok a gyűjteménytípusok háttérrendszerében egy konvencióra támaszkodnak a szintaxis engedélyezéséhez. Általában van egy háttértulajdonság, például egy indexelő vagy az Items tulajdonság, amely a gyűjtemény adott elemeire hivatkozik. Ez a tulajdonság általában nem explicit az XAML szintaxisban. Gyűjtemények esetén az XAML-elemzés alapjául szolgáló mechanizmus nem tulajdonság, hanem metódus: pontosabban a Hozzáadás metódus a legtöbb esetben. Ha az XAML-feldolgozó egy vagy több objektumelemet talál egy XAML-gyűjtemény szintaxisában, az egyes objektumok először egy elemből jönnek létre, majd a gyűjtemény Add metódusának meghívásával minden új objektum hozzáadódik a gyűjteményhez.

Amikor egy XAML-elemző elemeket ad hozzá egy gyűjteményhez, az Add metódus logikája határozza meg, hogy egy adott XAML-elem a gyűjteményobjektum megengedett elemének gyermeke-e. A háttér-implementáció számos gyűjteménytípust erősen típusítottá tesz, ami azt jelenti, hogy az Add bemeneti paramétere arra számít, hogy az átadott típusnak meg kell egyeznie az Add paraméter típusával.

A gyűjtemény tulajdonságainál ügyeljen arra, amikor a gyűjteményt kifejezetten objektumelemként próbálja meg megadni. Az XAML-elemzők minden alkalommal létrehoznak egy új objektumot, amikor objektumelemmel találkoznak. Ha a használni kívánt gyűjteménytulajdonság csak olvasható, ez XAML-elemzési kivételt dobhat. Csak használja az implicit gyűjtemény szintaxisát, és ezt a kivételt nem fogja látni.

Mikor érdemes attribútumot vagy tulajdonságelem-szintaxist használni?

Az XAML-ben való beállítást támogató összes tulajdonság támogatja a közvetlen értékbeállítás attribútum- vagy tulajdonságelem-szintaxisát, de lehetséges, hogy egyik szintaxist sem támogatja felcserélhetően. Egyes tulajdonságok mindkét szintaxist támogatják, egyes tulajdonságok pedig a további szintaxisbeállításokat, például az XAML-tartalomtulajdonságokat támogatják. A tulajdonság által támogatott XAML-szintaxis típusa attól függ, hogy a tulajdonság milyen típusú objektumot használ. Ha a tulajdonságtípus egy primitív típus, például kettős (lebegőpontos vagy decimális), egész szám, logikai vagy sztring, a tulajdonság mindig támogatja az attribútum szintaxisát.

Attribútumszintaxissal is beállíthat egy tulajdonságot, ha a tulajdonság beállításához használt objektumtípus sztring feldolgozásával hozható létre. A primitívek esetében ez mindig így van, a típusátalakítás az elemzőbe van beépítve. Bizonyos egyéb objektumtípusok azonban attribútumértékként megadott sztring használatával is létrehozhatók, nem pedig egy tulajdonságelemen belüli objektumelem használatával. Ahhoz, hogy ez működjön, egy mögöttes típusátalakításnak kell lennie, amelyet az adott tulajdonság támogat, vagy általában az adott tulajdonságtípust használó összes érték esetében támogatott. Az attribútum sztringértéke az új objektumérték inicializálásához fontos tulajdonságok beállítására szolgál. Lehetséges, hogy egy adott típuskonverter különböző alosztályokat is létrehozhat egy közös tulajdonságtípushoz attól függően, hogy egyedileg hogyan dolgozza fel a sztring adatait. Az ezt a viselkedést támogató objektumtípusok speciális nyelvtani listában jelennek meg a referenciadokumentáció szintaxis szakaszában. Az Ecset XAML szintaxisa például azt mutatja be, hogyan használható egy attribútumszintaxis egy új SolidColorBrush-érték létrehozásához bármely Ecset típusú tulajdonsághoz (és a Windows Runtime XAML-ben számos ecsettulajdonság létezik).

XAML-elemzési logika és szabályok

Néha informatív az XAML olvasása hasonlóan ahhoz, ahogyan azt egy XAML elemző teszi: lineáris sorrendben előforduló karakterlánc tokenek halmazaként. Az XAML-elemzőknek ezeket a jogkivonatokat olyan szabályok alapján kell értelmezniük, amelyek az XAML működésének definíciójának részét képezik.

Az attribútumérték beállítása az a tipikus eszköz, amellyel tulajdonságértéket állít be egy korrektúranyelven, például XML-ben vagy HTML-ben. A következő szintaxisban az objectName a példányozni kívánt objektum, a propertyName annak a tulajdonságnak a neve, amelyet be szeretne állítani az adott objektumon, a propertyValue pedig a beállítandó érték.

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

-or-

<objectName propertyName="propertyValue">

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

</objectName>

Bármelyik szintaxissal deklarálhat egy objektumot, és beállíthat egy tulajdonságot az adott objektumon. Bár az első példa a korrektúra egyetlen eleme, itt valójában különálló lépések vannak annak tekintetében, hogy egy XAML-processzor hogyan elemzi ezt a korrektúrát.

Először is az objektumelem jelenléte azt jelzi, hogy egy új objectName objektumot kell létrehozni. Csak akkor állítható be a példány tulajdonsága , ha létezik ilyen példány.

Az XAML másik szabálya, hogy egy elem attribútumainak bármilyen sorrendben be kell állítaniuk. Például nincs különbség <Rectangle Height="50" Width="100" /> és <Rectangle Width="100" Height="50" /> között. A használt sorrend stílus kérdése.

Megjegyzés:

Az XAML-tervezők gyakran előléptetik a rendezési konvenciót, ha az XML-szerkesztőn kívüli tervezési felületeket használ, de később szabadon szerkesztheti az XAML-t az attribútumok átrendezéséhez vagy újak bevezetéséhez.

Csatolt tulajdonságok

Az XAML kibővíti az XML-t egy csatolt tulajdonságként ismert szintaxiselem hozzáadásával. A tulajdonságelem szintaxisához hasonlóan a csatolt tulajdonságszintaxis egy pontból áll, a pont pedig az XAML-elemzés speciális jelentését tartalmazza. A pont különválasztja a csatolt tulajdonság szolgáltatóját és a tulajdonság nevét.

Az XAML-ben a csatolt tulajdonságokat a AttachedPropertyProvider szintaxissal állíthatja be. Tulajdonságnév Íme egy példa arra, hogyan állíthatja be a csatolt Canvas.Left tulajdonságot az XAML-ben:

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

A csatolt tulajdonságot olyan elemekre is beállíthatja, amelyek nem rendelkeznek ilyen nevű tulajdonságtal a háttértípusban, és így valamilyen módon globális tulajdonságként működnek, vagy egy másik XML-névtér által definiált attribútumot, például az xml:space attribútumot.

A Windows Runtime XAML-ben az alábbi forgatókönyveket támogató csatolt tulajdonságok láthatók:

További információ: Csatolt tulajdonságok áttekintése.

"{" literálértékek

Mivel a nyitó kapcsos zárójel szimbólum { a kódkiterjesztés-sorozat megnyitója, egy escape szekvenciát használ, hogy megadjon egy "{" karakterrel kezdődő literális szövegértéket. A menekülési sorozat a "{}". Ha például egy egyetlen nyitó zárójelet tartalmazó sztringértéket szeretne megadni, adja meg az attribútum értékét "{}{" értékként. Használhatja az alternatív idézőjeleket is (például egy "" karakterrel tagolt attribútumértéken belüli " karaktert) a "{" érték sztringként való megadásához.

Megjegyzés:

A "\}" akkor is működik, ha egy idézett attribútumban van.  

Számbavételi értékek

A Windows Runtime API számos tulajdonsága enumerálásokat használ értékként. Ha a tag olvasási-írási tulajdonság, az ilyen tulajdonságot egy attribútumérték megadásával beállíthatja. A tulajdonság értékeként használandó számbavételi értéket a konstansnév nem minősített nevével azonosíthatja. Például a következő módon állíthatja be a UIElement.Visibility értéket az XAML-ben: <Button Visibility="Visible"/>. Itt a "Visible" mint karakterlánc közvetlenül a Láthatóság enumeráció nevesített állandójára, Látható, van leképezve.

  • Ne használjon minősített űrlapot, az nem fog működni. Ez például érvénytelen XAML: <Button Visibility="Visibility.Visible"/>.
  • Ne használja az állandó értékét. Más szóval ne támaszkodjunk az enumerálás azon egész értékére, amely explicit módon vagy implicit módon van megadva attól függően, hogy az enumerálás hogyan lett definiálva. Bár úgy tűnhet, hogy működik, ez az XAML-ben vagy a kódban helytelen gyakorlat, mert az átmeneti implementáció részleteire támaszkodik. Például ne tegye a következőt: <Button Visibility="1"/>.

Megjegyzés:

Az XAML-t használó és enumerálásokat használó API-k referenciatémáiban kattintson a SzintaxisTulajdonságérték szakaszában az enumerálás típusára mutató hivatkozásra. Ez a hivatkozás az enumerálási oldalra mutat, ahol felfedezheti az enumerálás nevesített állandóit.

Az enumerálások jelzőként is kezelhetők, ami azt jelenti, hogy a FlagsAttribute attribútummal vannak ellátva. Ha xAML-attribútumértékként kell megadnia a jelzővel megegyező számbavétel értékeinek kombinációját, használja az egyes enumerálási állandók nevét az egyes nevek között vesszővel (,) és szóközkarakterjelek nélkül. A windowsos futtatókörnyezet XAML-szókincsében nem gyakoriak a flagwise attribútumok, de az ManipulationModes egy példa arra, hogy az XAML-ben a jelző járásával megegyező számbavételi érték beállítása támogatott.

Interfészek az XAML-ben

Ritkán egy XAML szintaxis jelenik meg, amelyben a tulajdonság típusa egy felület. Az XAML típusú rendszerben az interfészt megvalósító típus elfogadható értékként az elemzéskor. Az ilyen típusú példányból létrehozott példánynak elérhetőnek kell lennie, hogy értékként szolgáljon. A ButtonBaseCommand és CommandParameter tulajdonságainak XAML szintaxisában egy típusként használt felület jelenik meg. Ezek a tulajdonságok támogatják a Modell–View-ViewModel (MVVM) tervezési mintákat, ahol az ICommand felület a nézetek és modellek interakciójának szerződése.

XAML helyőrző konvenciók a Windows Futtatókörnyezet referenciájában

Ha megvizsgálta az XAML-t használó Windows Futtatókörnyezet API-k hivatkozási témaköreinek bármelyikét , valószínűleg azt látta, hogy a szintaxis számos helyőrzőt tartalmaz. Az XAML szintaxis eltér a C#, a Microsoft Visual Basic vagy a Visual C++ összetevőbővítmények (C++/CX) szintaxistól, mivel az XAML szintaxis egy használati szintaxis. Ez a saját XAML-fájlok végső használatára utal, de anélkül, hogy túlságosan előíró lenne a használható értékekkel kapcsolatban. A használat tehát általában olyan nyelvtani típust ír le, amely a literálokat és a helyőrzőket kombinálja, és meghatározza az XAML Értékek szakasz helyőrzőit.

Ha egy tulajdonság XAML szintaxisában típusneveket/elemneveket lát, a megjelenített név az eredetileg a tulajdonságot meghatározó típushoz tartozik. A Windows Runtime XAML azonban támogatja a DependencyObject-alapú osztályok osztályöröklési modelljét. Így gyakran használhat olyan attribútumot egy osztályon, amely nem szó szerint a meghatározó osztály, hanem egy olyan osztályból származik, amely először definiálta a tulajdonságot/attribútumot. A láthatóságot például bármely UIElement-származtatott osztály attribútumaként állíthatja be mély örökléssel. Például: <Button Visibility="Visible" />. Ezért ne vegye túl szó szerint az XAML-használat szintaxisában látható elemnevet; a szintaxis használható lehet az adott osztályt képviselő elemek, valamint a származtatott osztályt képviselő elemek esetében is. Azokban az esetekben, amikor ritka vagy lehetetlen, hogy a meghatározó elemként megjelenített típus valós használatban legyen, ez a típusnév szándékosan kisbetűs a szintaxisban. A UIElement.Visibility szintaxisa például a következő:

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

Számos XAML-szintaxisszakasz tartalmaz helyőrzőket a "Használat" területen, amelyeket aztán egy XAML-értékek szakaszban határoznak meg, amely közvetlenül a Szintaxis szakasz alatt található.

Az XAML használati szakaszai különböző általános helyőrzőket is használnak. Ezek a helyőrzők nem lesznek minden alkalommal újra definiálva az XAML-értékekben, mert kitalálhatja vagy végül megtanulhatja, hogy mit képviselnek. Úgy gondoljuk, hogy a legtöbb olvasó megunná, hogy újra és újra XAML-értékekben lássa őket, ezért kihagytuk őket a definíciókból. Az alábbiakban felsorolunk néhány helyőrzőt, és azok általános jelentését:

  • objektum: elméletileg bármilyen objektumérték, de gyakran gyakorlatilag bizonyos típusú objektumokra korlátozódik, például egy sztring- vagy objektumválasztásra, és további információkért tekintse meg a referenciaoldal megjegyzéseit.
  • objektumtulajdonság: az objektumtulajdonság együttes használata olyan esetekben használatos, amikor a megjelenített szintaxis egy olyan típus szintaxisa, amely számos tulajdonság attribútumértékeként használható. Az Xaml attribútumhasználati példa, amely a(z) Brush elemhez van megadva, a következőket tartalmazza: <objectproperty="predefinedColorName"/>
  • eventhandler: Ez egy eseményattribútum minden XAML-szintaxisának attribútumértékeként jelenik meg. Itt egy eseménykezelő függvény függvénynevét adja meg. Ezt a függvényt az XAML lap mögötti kódjában kell definiálni. A programozási szinten ennek a függvénynek meg kell egyeznie a kezelt esemény delegált aláírásával, vagy az alkalmazáskód nem fog lefordítani. De ez valójában programozási szempont, nem XAML-szempont, ezért nem próbálunk semmit sem utalni a delegált típusra az XAML szintaxisban. Ha tudni szeretné, hogy melyik delegáltat kell implementálnia egy eseményhez, az az esemény referenciatéma eseményinformációs szakaszában található, egy Delegált címkével ellátott táblázatsorban.
  • enumMemberName: az összes enumeráció attribútumszintaxisában jelenik meg. Létezik egy hasonló helyőrző a felsorolt értéket használó tulajdonságokhoz, de általában előtagot ad a helyőrzőnek a felsorolás nevével. A FrameworkElement.FlowDirection< szintaxisa például frameworkElementFlowDirection="flowDirectionMemberName"/>. Ha ezen tulajdonsághivatkozások egyikén dolgozik, kattintson a Tulajdonságérték szakaszban megjelenő enumerálási típusra mutató hivatkozásra a Szöveg típusa: szöveg mellett. Az enumerálást használó tulajdonság attribútumértékéhez a Tagok lista Tag oszlopában felsorolt karakterláncokat használhatja.
  • double, int, string, bool: Ezek az XAML nyelv által ismert primitív típusok. Ha C# vagy Visual Basic használatával programozást végez, ezek a típusok a Microsoft .NET-nek megfelelő típusokra lesznek kivetítve, például Dupla, Int32, Sztring és Logikai, és a .NET-típusok bármelyik tagját használhatja, ha az XAML-ben definiált értékekkel dolgozik a .NET-kód mögött. Ha C++/CX-et használ, a C++ primitív típusokat fogja használni, de ezeket a platformnévtér által definiált típusokkal egyenértékűnek is tekintheti, például a Platform::Sztringet. Bizonyos tulajdonságokra néha további értékkorlátozások is vonatkoznak. Ezeket azonban általában a Tulajdonságérték szakaszban vagy a Megjegyzések szakaszban fogja látni, és nem az XAML szakaszban, mert az ilyen korlátozások a kódhasználatokra és az XAML-használatokra is érvényesek.

Tippek és trükkök, jegyzetek a stílusról

  • A korrektúrakiterjesztéseket általában az XAML fő áttekintésében ismertetjük. A témakör útmutatását leginkább befolyásoló korrektúra-bővítmény azonban a StaticResource korrektúrakiterjesztés (és a kapcsolódó ThemeResource). A StaticResource jelölőbővítmény funkciója, hogy lehetővé tegye az XAML faktorálását egy XAML ResourceDictionary-ból származó újrafelhasználható erőforrásokba. Szinte mindig definiálhat vezérlősablonokat és kapcsolódó stílusokat egy ResourceDictionary-ban. A ResourceDictionary-ban gyakran definiálja a vezérlősablon definíciójának vagy alkalmazásspecifikus stílusának kisebb részeit is, például egy SolidColorBrush-t egy olyan színhez, amelyet az alkalmazás többször használ a felhasználói felület különböző részeihez. StaticResource használatával mostantól minden olyan tulajdonság beállítható attribútumszintaxisban, amely egyébként tulajdonságelem-használatot igényelne. Az XAML újbóli felhasználásának előnyei azonban túlmutatnak az oldalszintű szintaxis leegyszerűsítésén. További információ: ResourceDictionary és XAML erőforráshivatkozások.
  • Az XAML-példákban számos különböző konvenció jelenik meg a térközök és a vonalcsatornák alkalmazásának módjáról. Különösen különböző konvenciók léteznek a sok különböző attribútumot tartalmazó objektumelemek lebontására. Ez csak a stílus kérdése. A Visual Studio XML-szerkesztője alkalmaz néhány alapértelmezett stílusszabályt az XAML szerkesztésekor, de ezeket módosíthatja a beállítások között. Kevés olyan eset van, amikor az XAML-fájlban lévő üres terület jelentősnek minősül; további információ: XAML és whitespace.