#101 – What Visual Studio Does with Your XAML
October 21, 2010 3 Comments
Given that XAML is just a declarative representation of the objects used by your WPF application, the objects need to be instantiated at runtime.
Here’s the process (e.g. for MainWindow.xaml):
- While you work in designer, VS2010 automatically generates partial class (e.g. MainWindow.g.i.cs), including:
- Reference variables for named elements in XAMLÂ (e.g. myButton)
- Code to instantiate XAML objects at runtime
- When you build the project
- All code (yours and VS2010-generated) is compiled
- XAML is compiled into BAML (binary), stored in .baml file
- All BAML files combined into single .g.resources file (e.g. MyApp.g.resources)
- Executable is built, embedding the .g.resources file as a resource
- At runtime
- Window constructor calls InitializeComponent
- InitializeComponent (in generated code) calls Application.LoadComponent, passing URI identifying XAML
- LoadComponent loads binary XAML from embedded resource, creates all objects
- As BAML is read, window’s IComponentConnector.Connect method is called, which hooks up local object references to the created objects and attaches event handlers