WPF: Как определить происхождение фантомного окна?
Недавно я обновил стороннюю библиотеку, которую использовало мое приложение. После этого запуск приложения приводит к созданию "фантомного" окна. Я могу видеть пустое окно в верхнем левом углу экрана на мгновение, а затем оно становится невидимым. Это фантомное окно видно на панели задач. Выбор этого фантомного окна на панели задач отключает окно моего приложения.
Когда окно моего приложения активно, определенные события (такие как события колеса прокрутки) приводят к тому, что фантомное окно становится активным, мешая окну моего приложения получать события.
Если я закрываю фантомное окно с помощью панели задач, мое приложение ведет себя как обычно.
Я предполагаю, что это либо регрессия в рассматриваемой сторонней библиотеке, либо взаимодействие между моим кодом и кодом сторонней библиотеки.
Как я могу определить, где в кодовой базе создается и / или показывается это окно? В противном случае это способ, которым я могу перебрать все экземпляры окон в приложении WPF, чтобы я мог получить больше информации об окне (тип и т. Д.).
Это странная проблема, поэтому ни один ответ не будет считаться слишком странным!
3 ответа
Это, как оказалось, было вызвано встраиванием элемента управления браузера, который загружал плагин Google Chrome flash. По какой-то причине это взаимодействие вызвало появление фантомного окна. Использование стандартного (Adobe) плагина Flash не приводило к появлению этого окна.
Как могут заметить другие, Snoop и WPF Inspector могут быть хорошими местами для начала. Они позволяют вам следить за работающим приложением WPF и просматривать его визуальное дерево, так как элементы пользовательского интерфейса в целевом приложении будут выделены красной рамкой для легкой идентификации.
Это может дать вам подробную информацию о фантомном окне, но не скажет вам, почему оно появляется.
Используйте приложение Snoop Питера Блуа, чтобы получить подробную информацию об окне.