Hop til indhold
Udvikling og programmering

XAML (eXtensible Application Markup Language)

eXtensible Application Markup Language

XAML (eXtensible Application Markup Language) er et deklarativt markup-sprog baseret på XML, der bruges til at beskrive brugergrænsefladen i software-applikationer, primært til Windows. Sproget definerer hvilke skærmelementer en app består af — knapper, tekstfelter, layouts — og hvordan de er placeret og udseer ud, mens den logik der styrer, hvad der sker når brugeren klikker eller indtaster noget, som regel skrives et andet sted.

Den del af koden kaldes “code-behind” og skrives typisk i C#. Adskillelsen betyder i praksis, at en udvikler kan bygge en simpel loginskærm ved at skrive markup for et par tekstfelter og en login-knap i en .xaml-fil, mens selve logikken for, hvad der skal ske når knappen trykkes, ligger i en tilhørende C#-fil. Microsofts egen dokumentation beskriver XAML som “den deklarative markup-sprog, der bruges til at definere UI i WinUI-apps. Du beskriver din UI-struktur og properties i .xaml-filer, og håndterer logik og events i en tilhørende code-behind-fil”.

Sådan er XAML opbygget

Rent teknisk er XAML et XML-baseret sprog til at oprette objekter og angive deres properties. Det betyder, at et XAML-dokument følger de samme grundregler som XML — med start- og sluttags, indlejrede elementer og attributter — men med en række ekstra sprogkonstruktioner oven i. Al gyldig XAML er også gyldig XML, men XAML tilføjer sine egne begreber oven på det, blandt andet muligheden for at sætte en property som et indlejret element i stedet for en simpel attribut-streng. Hvert XAML-dokument starter med at erklære sine namespaces i rodelementet, og en typisk side i en WinUI-app bruger både et standard-namespace til de indbyggede kontroller og et såkaldt x-namespace til sprogfunktioner som x:Key, x:Class, x:Name og x:Uid, der bruges til henholdsvis ressourcenøgler, kobling til code-behind-klassen, navngivning af elementer til runtime-reference og lokalisering.

En vigtig del af syntaksen er de såkaldte markup extensions, som gør det muligt at sætte en property til noget, der ikke bare kan skrives som en almindelig tekststreng — for eksempel en reference til en delt ressource eller en databinding. Markup extensions lader dig sætte en property til noget, der ikke kan udtrykkes som en almindelig streng — som en reference til en delt ressource eller en databinding. De bruger tuborg-klamme-syntaks, og de mest almindelige er {Binding} til runtime-databinding, {StaticResource} til at referere til en indgang i en ressource-ordbog, og {x:Bind}, som ifølge Microsofts dokumentation er en compile-time databinding med bedre ydeevne end den klassiske {Binding}.

Hvor bruges XAML

XAML bruges hovedsageligt inden for Microsofts eget økosystem, hvor sproget definerer brugergrænsefladen i WinUI-apps og ældre UWP-apps (Universal Windows Platform). Ifølge Uno Platforms dokumentation er XAML UI-komponenter byggeklodserne til at skabe brugergrænseflader i WinUI- og Uno Platform-applikationer. Uno Platform er et rammeværk, der gør det muligt at genbruge den samme XAML-baserede kodebase på flere platforme end blot Windows: med Uno Platform virker de samme komponenter på tværs af Windows, iOS, Android, macOS, Linux og WebAssembly fra én enkelt kodebase. Det betyder, at en udvikler i mange tilfælde kan skrive layoutet til en app én gang i XAML og få det til at køre både som Windows-desktopprogram og som mobilapp, i stedet for at vedligeholde separate UI-lag til hver platform. Som Uno Platforms egen guide til XAML UI-design formulerer det, er XAML UI-design processen med at skabe brugergrænseflader ved hjælp af eXtensible Application Markup Language (XAML), et deklarativt markup-sprog til at definere layouts, kontroller og visuelle elementer i .NET-applikationer.

Layout-paneler og kontroller i XAML

En stor del af det praktiske arbejde med XAML handler om at vælge de rigtige layout-paneler til at arrangere indholdet på skærmen. De mest anvendte paneler er Grid, StackPanel, RelativePanel og Canvas. Grid er det mest alsidige layout-panel og understøtter flere rækker og kolonner med fleksible størrelsesmuligheder, mens StackPanel arrangerer underliggende elementer i én linje, enten lodret (standard) eller vandret. Canvas adskiller sig ved at placere elementer med faste koordinater — Canvas giver absolut placering ved hjælp af koordinater, og selvom det er nyttigt til tegneprogrammer eller spil-overlays, tilpasser det sig ikke ændringer i vinduesstørrelsen. Oven på layout-panelerne kommer selve kontrollerne — de elementer brugeren rent faktisk interagerer med, som knapper, tekstfelter, lister og navigationsmenuer. Genanvendelige visuelle elementer som farver, typografier og skabeloner kan desuden samles i en ResourceDictionary, hvor en ResourceDictionary gemmer genanvendelige objekter — pensler, styles, templates — identificeret ved x:Key, så de nemt kan genbruges flere steder i en app uden at blive defineret på ny hver gang.

Hvem arbejder med XAML

XAML bruges primært af .NET-udviklere, der bygger Windows-applikationer eller cross-platform-apps med værktøjer som Uno Platform, samt af UX/UI-designere, der arbejder tæt sammen med disse udviklere om det visuelle udtryk. Fordi XAML er et tekstbaseret format adskilt fra selve programlogikken, kan de to roller i vidt omfang arbejde parallelt: fordi XAML er et tekstbaseret udvekslingsformat, kan designere og udviklere arbejde uafhængigt af hinanden — designere udformer den visuelle struktur i XAML, udviklere kobler logikken til i code-behind, og begge kan iterere uden at blokere hinanden. I dag understøttes dette arbejde ofte af AI-baserede kodeassistenter. Værktøjer som Claude Code kan bruges til at generere, forklare og fejlrette XAML-markup ud fra en beskrivelse i almindeligt sprog, mens sprogmodeller af typen GPT (Generative Pre-trained Transformer) ofte ligger til grund for den slags kodeassistance. Det ændrer ikke ved, at XAML i sig selv stadig er det format, der beskriver strukturen — men det gør det hurtigere at komme fra en idé til en fungerende skærm.

Eksempel
En udvikler kan bygge en loginskærm ved at skrive markup for et brugernavnfelt, et adgangskodefelt og en login-knap i en .xaml-fil, mens klik-logikken for knappen ligger i en tilhørende C#-fil (code-behind).
Ofte stillede spørgsmål
Hvad betyder forkortelsen XAML?
XAML står for eXtensible Application Markup Language, et navn der understreger, at sproget er en udvidelse af XML til at beskrive applikationers brugergrænseflade.
Er XAML det samme som XML?
Nej, men de to hænger tæt sammen. Al gyldig XAML er også gyldig XML, men XAML tilføjer ekstra sprogkonstruktioner som markup extensions, namespaces med x-præfiks og property-element-syntaks, som almindelig XML ikke har.
Kan XAML bruges til andet end Windows-apps?
Ja. Ud over WinUI og UWP på Windows bruges XAML også via rammeværket Uno Platform, hvor den samme markup kan genbruges til apps på iOS, Android, macOS, Linux og som WebAssembly i browseren.
Hvad er forskellen på Grid og StackPanel i XAML?
Grid opdeler skærmen i rækker og kolonner og er velegnet til komplekse layouts, mens StackPanel arrangerer elementer i én lodret eller vandret linje og bruges til enklere, lineære opstillinger.
Skal man kunne programmere for at bruge XAML?
XAML beskriver kun det visuelle layout, så en designer kan i princippet arbejde med markupdelen alene, men den fulde app kræver typisk også code-behind-kode i fx C# til at håndtere hændelser og logik.
Vil du se, hvordan en AI-kodeassistent konkret kan hjælpe med at skrive og fejlrette XAML-markup i praksis?
Claude Code →