Hur fungerar kompileringen av XAML?

Under förra veckans NorDev konferens visade jag hur vi framöver kommer att kunna skapa våra gränssnitt med hjälp av XAML (XML Application Markup Language) men förklarade nog inte riktigt vad som döljer sig bakom kulisserna när vi kompilerar .XAML filer och exekverar dem.

Om vi skapar en applikation för Avalon med hjälp av XAML så kommer vi med största sannolikhet ha två stycken filer, den ena är just vår .xaml fil som kommer att innehålla det hierarkiska träd som beskriver vårt gränssnitt och sedan har vi antagligen också en .xaml.cs (eller .xaml.vb eller något annat) fil där vi implementerar logik och händelsehantering. När Visual Studio kompilerar dessa sidor kommer det först att genereras två stycken filer baserat på det ursprungliga .xaml dokumentet. För <filnamn>.xaml kommer dessa filer generas:

<filnamn>.baml som är en binär version av .xaml filen och som sedan kommer att kompileras in i .exe filen som en vanlig resursfil.
<filnamn>.g.cs (eller .g.vb) som kommer att vara en Partial Class med samma klassnamn som <filnamn>.xaml.xs. Denna fil innehåller initialiseringskod som:

1. Laddar .baml resursen för att visa gränssnittet.
2. Ser till att händelshanterare knyts upp.
3. Knyter upp variabler till riktiga objekt, till exempel button1 osv..

Så det är en tvåstegsprocess: först generering av korrekta filer, sedan kompilering och generering av .exe filen.

Hängde du med? :)