169

InitializeComponent()WPF で何をし、どのように機能しますか?

一般的には最初ですが、構築の順序の厄介な詳細と、添付プロパティがある場合に何が起こるかを知りたいです。

4

2 に答える 2

163

への呼び出しInitializeComponent()(通常は少なくともWindowandの既定のコンストラクターで呼び出されますUserControl) は、実際にはコントロールの部分クラスへのメソッド呼び出しです (最初に期待したオブジェクト階層の呼び出しではありません)。

Windowこのメソッドは、読み込んでいる/の XAML への URI を見つけて、静的メソッドUserControlに渡します。渡された URI にある XAML ファイルを読み込み、XAML ファイルのルート要素で指定されたオブジェクトのインスタンスに変換します。System.Windows.Application.LoadComponent()LoadComponent()

詳細にLoadComponentは、 のインスタンスを作成しXamlParser、XAML のツリーを構築します。各ノードは によって解析されますXamlParser.ProcessXamlNode()。これはクラスに渡されBamlRecordWriterます。この後しばらくして、BAML がどのようにオブジェクトに変換されるかについて少し迷ってしまいますが、悟りへの道を歩むにはこれで十分かもしれません。

注: 興味深いことに、これはインターフェイスInitializeComponentのメソッドであり、その/は部分的に生成されたクラスに実装されます。System.Windows.Markup.IComponentConnectorWindowUserControl

お役に立てれば!

于 2008-10-29T05:21:20.660 に答える
26

コードを見ることも常に役立ちます。つまり、次のようにして、生成された部分クラス ( LoadComponentを呼び出す)を実際に確認できます。

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

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

于 2008-10-29T14:31:03.030 に答える