質問

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 を呼び出す)を実際に見ることができます。

  1. 目的のVisual Studioソリューションの[ソリューションエクスプローラー]ペインに移動します。
  2. 「すべてのファイルを表示」というタイトルのソリューションエクスプローラーのツールバーにボタンがあります。そのボタンを切り替えます。
  3. 今、 obj フォルダーを展開し、次に Debug または Release フォルダー(または構築中の構成)を展開すると、 YourClass .g.csというタイトルのファイル。

YourClass .g.cs ...は、生成された部分クラスのコードです。繰り返しますが、これを開くと、InitializeComponentメソッドとLoadComponent ...などの呼び出し方法を確認できます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top