XAMLが読み込まれている間に何が起こるかを知る方法を見たいと思います。どのクラスがインスタンス化されているのか、どのような順序でクラス化されていますか?どのプロパティがどのような値に設定され、どのような順序で設定されていますか?どのメソッドが呼び出されているか(BeginInit、EndInitなど)、どのような順序で、どのパラメータでそんなこと。XAMLの読み込み中に何が起こるかをどのようにトレースできますか?
(誰もが理由として好奇心旺盛ならXAMLローダーはI can't duplicate in code何かの魔法をやっている、と私はそれが何であるかを把握しようとしているので、それはです。)
- 私の最初のアイデア:Configure VS to debug into the .NET source code、何が起こるかを見るためにXAML読み込みコードを1ステップ実行します。残念なことに、source stepping has been busted for months, and there's no sign of that changing.
- 私の2番目のアイデア:WPFクラスの下位クラスを作成し、OnPropertyChangedを上書きし、Debug.WriteLineを実行します。残念ながら、私が知りたいクラスの1つ(BitmapImage)は封印されているので、私はそれから下降することはできません。
他にも、XAMLローダーが何をしているかを誰かが知ることができますか?私にコールグラフを与えるツール(プロファイラ、多分?)はありますか? XAMLローダーで何らかのログを有効にする方法はありますか?思考/提案?
編集:スティーブは自分のサンプルコードは、すべてのイベントが2回表示を取得せても、答えを持っていないためにリンク先の記事。参考までに、コードでこの作業を行う方法です(app.configの変更は必要ありません)。 InitializeComponent()呼び出しの前にこれらの行を追加します(または、デバッガでイミディエイトウィンドウに両方の行を入力):
PresentationTraceSources.Refresh();
PresentationTraceSources.MarkupSource.Switch.Level = SourceLevels.All;
これは魔法のようにセットされますプロパティを含む、詳細な出力がVSの出力ウィンドウに表示するようになります舞台裏で