Я хотел бы найти способ посмотреть, что происходит, когда загружается мой XAML. Какие классы создаются и в каком порядке? Какие свойства устанавливаются, каким значениям и в каком порядке? Какие методы вызываются (например, BeginInit, EndInit и т. Д.), В каком порядке и с какими параметрами? Такого рода вещи.
(Если кому-то интересно, почему, загрузчик XAML делает что-то волшебное, что я не могу скопировать в коде , и я пытаюсь выяснить, что это такое.)
- Моя первая идея: Сконфигурировать VS для отладки в исходном коде .NET и выполнить пошаговый просмотр кода загрузки XAML, чтобы увидеть, что происходит. К сожалению, пошаговое изменение источника работало месяцами, и никаких признаков этого изменения нет.
- Моя вторая идея: создать свои собственные классы, которые происходят от классов WPF, переопределить OnPropertyChanged и выполнить Debug.WriteLine. К сожалению, один из классов, о которых я хочу знать ( BitmapImage ), закрыт, поэтому я не могу сойти с него.
У кого-нибудь есть другие идеи о том, как мне получить представление о том, что делает загрузчик XAML? Существуют ли какие-либо инструменты (возможно, профилировщик?), Которые могут дать мне график вызовов? Есть ли способ включить какую-то регистрацию в загрузчике XAML? Мысли / предложения?
Редактировать: Статья, на которую ссылается Стив, имеет ответ, хотя их пример кода заставляет каждое событие отображаться дважды. Для справки, вот как это сделать в коде (никаких изменений в app.config не требуется). Добавьте эти строки перед вызовом InitializeComponent () (или введите обе строки в окно Immediate в отладчике):
PresentationTraceSources.Refresh();
PresentationTraceSources.MarkupSource.Switch.Level = SourceLevels.All;
Это приведет к тому, что в окне вывода VS появится подробный вывод, включая свойства, которые волшебным образом устанавливаются за кулисами.