11

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

2 回答 2

8

我相信你正在寻找这个活动

_applicationObject.Events.WindowEvents.WindowActivated

检查GotFocus.Document == null您是否只对文档激活更改感兴趣

希望这可以帮助

于 2012-05-13T20:41:28.257 回答
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)
    {
        // ...
    }
}
于 2014-07-21T15:03:39.693 回答