DTE.ActiveDocument更改时收到通知

时间:2012-04-27 15:33:24

标签: c# .net visual-studio visual-studio-2008

我正在编写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
}

2 个答案:

答案 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)
    {
        // ...
    }
}