如何在 VSPackage 中检测 XAML 设计器窗口

问题描述

在我的 VSPackage 中,我有一个用于 EnvDTE.WindowEvents 界面上的 WindowActivated 事件的事件处理程序。

在我的代码中,我检查激活的窗口是否是 WinForms 设计器(在 VB.NET 中)

If TypeOf GotFocus.Object Is IDesignerHost Then
  ...
End if

或带有

的 ASP 设计器窗口
If TypeOf GotFocus.Object Is EnvDTE.HTMLWindow Then
  ...
End if

检测 XAML 设计器窗口何时被激活的最佳方法是什么?

当然,我可以在标题(GotFocus.Caption)中查看文件扩展名,但我想知道是否有更好的方法

解决方法

文件扩展名可能不是一个好主意,因为您也可以使用股票代码编辑器打开 .XAML 文件:-)

我能想到的最简单的方法是利用 IVsMonitorSelection 服务。

使用 XAML 设计器上下文 guid {e9b8485c-1217-4277-b6d6-c825a5ac1968}(与 GetCmdUIContextCookie 一起找到)调用 Component Diagnostics extension,然后调用 IsCmdUIContextActive 以确定是否设计器已激活。