What does InitializeComponent() do, and how does it work? (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 AttachedProperties.
What does InitializeComponent() do, and how does it work? (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 AttachedProperties.
The call to InitializeComponent()
(which is usually called in the default constructor of at least Window and UserControls) 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 and 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. Sometime 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 an method on the System.Windows.Markup.IComponentConnector
interface, of which Window/UserControls implement in the partial generated class.
Hope this helps!
Looking at the code always helps too. That is, you can actually take a look at the generated partial class (that calls LoadComponent) by doing the following:
The YourClass.g.cs ... is the code for generated partial class. Again, if you open that up you can see the InitializeComponent method and how it calls LoadComponent ... and much more.