InitializeComponent()は何をし、WPFではどのように機能しますか?
-
05-07-2019 - |
質問
InitializeComponent()
は何をし、WPFではどのように機能しますか?
最初は一般的ですが、特に、構築の順序に関する面倒な詳細と、添付プロパティがある場合に何が起こるかを知りたいと思います。
解決
InitializeComponent()
(通常、少なくとも Window
および UserControl
のデフォルトコンストラクターで呼び出される)への呼び出しは、実際にはメソッドですコントロールの部分クラスを呼び出します(最初に予想したようにオブジェクト階層を呼び出すのではなく)。
このメソッドは、読み込んでいる Window
/ UserControl
のXAMLへのURIを見つけ、それを System.Windows.Application.LoadComponent( )
静的メソッド。 LoadComponent()
は、渡されたURIにあるXAMLファイルをロードし、XAMLファイルのルート要素で指定されたオブジェクトのインスタンスに変換します。
さらに詳しくは、 LoadComponent
は XamlParser
のインスタンスを作成し、XAMLのツリーを構築します。各ノードは、 XamlParser.ProcessXamlNode()
によって解析されます。これは BamlRecordWriter
クラスに渡されます。この後しばらくすると、BAMLがオブジェクトに変換される方法が少し失われますが、これは啓発への道を進めるのに十分かもしれません。
注:興味深いことに、 InitializeComponent
は System.Windows.Markup.IComponentConnector
インターフェースのメソッドであり、その Window
/ UserControl
は、部分的に生成されたクラスに実装します。
これがお役に立てば幸いです!
他のヒント
コードを見ることも常に役立ちます。つまり、以下を実行することで、生成された部分クラス( LoadComponent を呼び出す)を実際に見ることができます。
- 目的のVisual Studioソリューションの[ソリューションエクスプローラー]ペインに移動します。
- 「すべてのファイルを表示」というタイトルのソリューションエクスプローラーのツールバーにボタンがあります。そのボタンを切り替えます。
- 今、 obj フォルダーを展開し、次に Debug または Release フォルダー(または構築中の構成)を展開すると、 YourClass .g.csというタイトルのファイル。
YourClass .g.cs ...は、生成された部分クラスのコードです。繰り返しますが、これを開くと、InitializeComponentメソッドとLoadComponent ...などの呼び出し方法を確認できます。