【发布时间】:2009-06-30 20:58:50
【问题描述】:
我想找到一种方法来查看加载我的 XAML 时会发生什么。正在实例化哪些类,以什么顺序进行实例化?正在设置哪些属性、设置哪些值以及以什么顺序?正在调用哪些方法(例如 BeginInit、EndInit 等),以什么顺序以及使用什么参数?那种东西。
(如果有人好奇为什么,那是因为 XAML 加载器正在做一些神奇的事情,我 can't duplicate in code,我正试图弄清楚它是什么。)
- 我的第一个想法:Configure VS to debug into the .NET source code,然后单步执行 XAML 加载代码,看看会发生什么。不幸的是,source stepping has been busted for months, and there's no sign of that changing.
- 我的第二个想法:创建自己的 WPF 类派生类,覆盖 OnPropertyChanged,并执行 Debug.WriteLine。不幸的是,我想知道的其中一个课程 (BitmapImage) 是封闭的,所以我不能从它那里下来。
关于如何让我了解 XAML 加载器正在做什么,有人有其他想法吗?是否有任何工具(也许是分析器?)可以给我一个调用图?有没有办法在 XAML 加载器中打开某种日志记录?想法/建议?
编辑:史蒂夫链接到的文章确实有答案,尽管他们的示例代码使每个事件都显示两次。作为参考,以下是如何在代码中进行这项工作(无需更改 app.config)。在 InitializeComponent() 调用之前添加这些行(或在调试器的立即窗口中键入这两行):
PresentationTraceSources.Refresh();
PresentationTraceSources.MarkupSource.Switch.Level = SourceLevels.All;
这将导致详细的输出显示在 VS 的输出窗口中,包括在幕后神奇设置的属性。
【问题讨论】: