Получать уведомления при изменении DTE.ActiveDocument

Я пишу расширение Visual Studio 2008. Я хочу получать уведомления каждый раз, когда изменяется DTE.ActiveDocument, поэтому я могу что-то обновить на пользовательской панели, которая выполняет аналогичную функцию в explorer. Мне еще предстоит найти какое-либо событие, которое происходит, когда это произойдет. Есть ли такое событие?

Конкретно, я ищу что-то вроде:

var dte = GetService(typeof(EnvDTE._DTE)) as EnvDTE.DTE;
dte.Events.DTEEvents.ActiveDocumentChanged += s => {
    // implies dte.ActiveDocument has changed value
}

Ответ 1

Я верю, что вы ищете это событие

_applicationObject.Events.WindowEvents.WindowActivated

проверить GotFocus.Document == null, если вас интересуют только изменения активации документа.

Надеюсь, что это поможет

Ответ 2

Вы также можете реализовать 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)
    {
        // ...
    }
}