What does InitializeComponent() do, and how does it work in WPF?
.net, attached-properties, c#, wpf
Solution
The call to `InitializeComponent()` (which is usually called in the default constructor of at least `Window` and `UserControl`) is actually a method call to the partial class of the control (rather than a call up the object hierarchy as I first expected).
This method locates a URI to the XAML for the `Window`/`UserControl` that is loading, and passes it to the `System.Windows.Application.LoadComponent()` static method. `LoadComponent()` loads the XAML file that is located at the passed in URI, and converts it to an instance of the object that is specified by the root element of the XAML file.
In more detail, `LoadComponent` creates an instance of the `XamlParser`, and builds a tree of the XAML. Each node is parsed by the `XamlParser.ProcessXamlNode()`. This gets passed to the `BamlRecordWriter` class. Some time after this I get a bit lost in how the BAML is converted to objects, but this may be enough to help you on the path to enlightenment.
Note: Interestingly, the `InitializeComponent` is a method on the `System.Windows.Markup.IComponentConnector` interface, of which `Window`/`UserControl` implement in the partial generated class.
Problem
What does `InitializeComponent()` do, and how does it work in WPF? In general first, but I would especially be interested to know the gory details of order of construction, and what happens when there are Attached Properties.