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の呼び出し方法などを確認できます。