Nyelv

Az XAML áttekintése

Az XAML (Extensible Application Markup Language) a Felhasználói felület WinUI-alkalmazásokban való definiálásához használt deklaratív korrektúranyelv. Leírhatja a felhasználói felület struktúráját és tulajdonságait a fájlokban .xaml , és kezelheti a logikát és az eseményeket egy párosított kód mögötti fájlban.

Megjegyzés:

A C# és a C++/WinRT winUI 3/Windows App SDK és UWP-alkalmazásokhoz egyaránt támogatott. A C++/CX csak az UWP-re vonatkozik, és a WinUI 3 esetében nem támogatott.

Mi az az XAML?

Az XAML egy XML-alapú nyelv objektumok létrehozásához és tulajdonságaik beállításához. A felhasználói felület elemeit – gombokat, szövegdobozokat, elrendezéseket – korrektúraként deklarálhatja, és egy kód mögötti fájl használatával reagálhat az eseményekre, és futtatáskor módosíthatja ezeket az elemeket.

Mivel az XAML szövegalapú felcserélő formátum, a tervezők és a fejlesztők egymástól függetlenül dolgozhatnak: a tervezők az XAML-ben készítik el a vizualizációs struktúrát, a fejlesztők kód mögé építik a logikát, és mindkettő egymás blokkolása nélkül is iterálhat.

Alapszintű XAML szintaxis

Az összes érvényes XAML is érvényes XML, de az XAML saját fogalmakat ad hozzá. A tulajdonságelem szintaxisa például lehetővé teszi, hogy egy tulajdonságot beágyazott XML-elemként állítson be attribútumsztring helyett – érvényes XML, de az XAML-ben extra jelentéssel.

A szintaxis teljes részleteiért tekintse meg az XAML szintaxisát ismertető útmutatót.

XAML és Visual Studio

Visual Studio XAML-szerkesztője IntelliSense, automatikus kiegészítés és vizuális tervezési felületet biztosít. A hibák a fordítás előtt hullámos vonalként jelennek meg. Nem kell minden szintaxisszabályt megjegyeznie – hagyja, hogy az IDE vezessen.

XAML-névterek

Minden XAML-fájl névtereket deklarál a gyökérelemben. Egy tipikus WinUI-oldal kettővel kezdődik:

<Page
    x:Class="Application1.BlankPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
>
  • Alapértelmezett névtér (xmlns=): Az összes beépített WinUI-vezérlőt, szöveget, ábrát, adatkötést és stílustípust tartalmazza. Az XAML nagy része ezt a névteret használja előtag nélkül.
  • XAML-nyelvi névtér (xmlns:x=): A(z) x: előtaghoz van rendelve, és alapvető nyelvi funkciókat biztosít.

A x: névtér

Attribute Alkalmazás célja
x:Kulcs Egy erőforrás egyedi kulcsa egy ResourceDictionary
x:Class Az XAML-fájl csatolása a kód mögötti osztályhoz
x:Név Futtatókörnyezet nevét rendeli hozzá, hogy a mögöttes kód hivatkozzon az elemre
x:UID A honosított erőforrás-helyettesítés elemeinek megjelölése
XAML belső típusok Egyszerű értékeket (például x:Boolean) fejez ki objektumelemként

Egyéni típusok leképezése

Ha saját vagy harmadik féltől származó kódtártípusokat szeretne használni az XAML-ben, deklaráljon egy névtérelőtagot, amely a kódnévtérre van leképezve:

xmlns:myTypes="using:myCompany.myTypes"

Ezután hivatkozzon ezekre a típusokra az előtaggal:

<myTypes:CustomButton/>

További részletekért, beleértve a C++/CX szempontokat, tekintse meg az XAML-névtereket és a névtérleképezést.

Tervezői és kompatibilitási névterek

Az eszköz által létrehozott XAML-ben gyakran jelennek meg d: (tervező) és mc: (korrektúrakompatibilitás) előtagok. Ezek a tervezéskori fejlesztőeszközöket támogatják, és futásidőben biztonságosan figyelmen kívül hagyhatók. További információ: Egyéb XAML-névterek.

Jelölő bővítmények

A korrektúrakiterjesztésekkel olyan tulajdonságot állíthat be, amely nem fejezhető ki egyszerű sztringként – például megosztott erőforrásra vagy adatkötésre való hivatkozásként. Kapcsos zárójel szintaxist használnak:

<Button Style="{StaticResource SearchButtonStyle}"/>

{StaticResource} nélkül bőbeszédű tulajdonságelem-szintaxist kellene használnod ahhoz, hogy Style-t rendelj hozzá. A jelölőbővítmények tömörré teszik a XAML-t.

Windows-futtatókörnyezet XAML támogatja ezeket a korrektúrakiterjesztéseket:

Extension Alkalmazás célja
{x:Bind} Fordításkori adatkötés (legjobb teljesítmény)
{Binding} Futtatókörnyezeti adatkötés
{StaticResource} Hivatkozzon egy ResourceDictionary bejegyzésre a kulcsa alapján
{ThemeResource} Például {StaticResource}, de az alkalmazás témájának változásakor frissül
{TemplateBinding} Kötés egy vezérlősablon szülőjének tulajdonságához
{RelativeSource} Kötés a sablonalapú szülőhöz képest
{CustomResource} Speciális egyéni erőforrás-keresés
{x:Null} Kifejezetten állítson be egy nullázható értéket erre: null

A jelölőkiterjesztések beágyazhatók; először a legbelsőt értékeli ki.

Events

Eseménykezelők csatolása az XAML-ben az esemény attribútumként való megadásával és a kezelőmetódus nevének értékként való megadásával:

<Button Click="showUpdatesButton_Click">Show updates</Button>

A fordító egy megfelelő metódust vár a kód mögött, a megfelelő meghatalmazotti aláírással:

private void showUpdatesButton_Click(object sender, RoutedEventArgs e)
{
    // your code
}
void showUpdatesButton_Click(Windows::Foundation::IInspectable const&, Microsoft::UI::Xaml::RoutedEventArgs const&);

Megjegyzés:

A C++/CX-ben minden XAML-lap két kód mögötti fájllal rendelkezik: egy fejlécet (.xaml.h) és egy implementációt (.xaml.cpp).

További információ: Események és irányított események áttekintése.

Erőforrás-szótárak

Az ResourceDictionary újrahasználható objektumokat – keféket, stílusokat, sablonokat – tárolja, amelyeket a x:Keyazonosít. Az erőforrások egy oldal erőforrások szakaszában vagy egy külön .xaml fájlban lehetnek. A teljes magyarázatért tekintse meg a ResourceDictionary és az XAML erőforráshivatkozásait.

XAML és XML

Az XAML az XML egy szuperhalmaza, amelyről néhány dolgot tudni kell:

  • Kis- és nagybetűk megkülönböztetése: Az elemek és attribútumok nevének pontosan meg kell egyeznie.
  • xml:lang: Az XAML-ben érvényes, de keretrendszerszintű futtatókörnyezeti viselkedésre van leképezve, nem elemzési viselkedésre.
  • Kódolás: Csak az UTF-8 és az UTF-16 támogatott.

XAML-névszkópok

A hozzárendelt x:Name neveknek egyedinek kell lenniük a névhatókörükön belül. A névterek különösen fontosak a vezérlősablonokban, ahol a nevek hatóköre nem az oldalra, hanem a sablonra terjed ki. További részletekért lásd az XAML-névszkópokat.

Teljesítménnyel kapcsolatos tippek

  • A gyakran használt ecseteket definiálja SolidColorBrush erőforrásként a színliterálok ismétlése helyett.
  • Az oldalak között megosztott erőforrásokat helyezze a Application.Resources elembe; az oldalspecifikus erőforrásokat tartsa helyben az adott oldalon.
  • Szállítás előtt távolítsa el a nem használt erőforrásokat (hivatkozás nélküli {StaticResource} kulcsokat).
  • Kerülje a vezérlősablonok felülbírálását – az alapértelmezett értékek már optimalizálva vannak a terhelési teljesítményre.
  • Használjon Border és elrendezéstárolókat ugyanannak a képpontnak a többszöri megrajzolása (túlrajzolás) helyett.
  • Használja a(z) ListView és GridView alapértelmezett elemsablonjait; a hozzájuk tartozó Presenter logika nagyméretű listákhoz van optimalizálva.

További útmutatásért lásd: A XAML-jelölés optimalizálása.

XAML hibakeresése

A .xaml fájlokban nem lehet töréspontokat beállítani, de a Visual Studio más módon segít:

  • Tervezési idő: Beíráskor a hullámos és hibajelölők beágyazottan jelennek meg.
  • Futtatókörnyezet: Az értelmezési hibák egy XamlParseException kivételt váltanak ki (vagy C++/CX esetén egy hasonló strukturált kivételt), a XAML-fájl sorszámára vonatkozó információval.

A futtatókörnyezeti hibák kezelésével kapcsolatban lásd a WinUI-alkalmazások kivételkezelését a C#-ban. Hibakeresési munkamenet indításához lásd: Hibakeresési munkamenet indítása.