我正在编写Visual Studio 2008扩展。我希望每次DTE.ActiveDocument更改时都会收到通知,因此我可以在自定义面板中更新某些内容,该面板执行与解决方案资源管理器类似的功能。我还没有找到发生这种情况时发生的任何事件。有这样的事件吗?
具体来说,我正在寻找类似的东西:
var dte = GetService(typeof(EnvDTE._DTE)) as EnvDTE.DTE;
dte.Events.DTEEvents.ActiveDocumentChanged += s => {
// implies dte.ActiveDocument has changed value
}
答案 0 :(得分:6)
我相信你正在寻找这个活动
_applicationObject.Events.WindowEvents.WindowActivated
如果您只对文档激活更改感兴趣,请检查GotFocus.Document == null
希望这有帮助
答案 1 :(得分:1)
您还可以实现IVsRunningDocTableEvents
,将自己注册为侦听器,然后在切换文档之前调用OnBeforeDocumentWindowShow
方法。
class RdtEvents : IVsRunningDocTableEvents
{
RdtEvents()
{
var rdt = Package.GetGlobalService(typeof(SVsRunningDocumentTable));
uint evtCookie;
rdt.AdviseRunningDocTableEvents(this, out evtCookie);
}
// ...
int IVsRunningDocTableEvents.OnBeforeDocumentWindowShow(uint docCookie, int fFirstShow, IVsWindowFrame pFrame)
{
// ...
}
}