InitializeComponent()WPFでは何が行われ、どのように機能しますか?
一般的には最初に、しかし特に私は特に、建設の順序の残酷な詳細と、添付プロパティがある場合に何が起こるかを知りたいと思います。
InitializeComponent()WPFでは何が行われ、どのように機能しますか?
一般的には最初に、しかし特に私は特に、建設の順序の残酷な詳細と、添付プロパティがある場合に何が起こるかを知りたいと思います。
回答:
呼び出しInitializeComponent()(通常は少なくとものデフォルトコンストラクタで呼び出されるWindowと、UserControl)は、実際にはコントロールの部分クラスへのメソッド呼び出しです(最初に期待したオブジェクト階層を呼び出すのではありません)。
このメソッドは、ロードしているWindow/ のXAMLへのURIを特定し、UserControlそれをSystem.Windows.Application.LoadComponent()静的メソッドに渡します。LoadComponent()渡されたURIにあるXAMLファイルをロードし、XAMLファイルのルート要素で指定されたオブジェクトのインスタンスに変換します。
より詳細にLoadComponentは、のインスタンスを作成しXamlParser、XAMLのツリーを構築します。各ノードはによって解析されますXamlParser.ProcessXamlNode()。これはBamlRecordWriterクラスに渡されます。この後しばらくして、BAMLがオブジェクトに変換される方法で少し迷子になりますが、これで十分に悟りへの道を進むことができます。
注:興味深いことに、これInitializeComponentはSystem.Windows.Markup.IComponentConnectorインターフェース上のメソッドであり、そのWindow/ UserControl部分的に生成されたクラスに実装されます。
お役に立てれば!
コードを確認することも常に役立ちます。つまり、次のようにして、実際に(LoadComponentを呼び出す)生成された部分クラスを確認できます。
YOURCLASSの .g.cs ...生成された部分クラスのコードです。繰り返しますが、これを開くと、InitializeComponentメソッドと、LoadComponentの呼び出し方法などを確認できます。