Visual Studio 2017: Event-call, когда пользователь меняет вкладку

Я пытаюсь написать outliner для XML-кода в VS (расширение, использующее их SDK из шаблона VSIX), и я хотел бы получить событие-вызов всякий раз, когда пользователь переключается на другое представление кода / документ.

Затем я планирую проверить тип документа, создать и визуализировать интерактивную схему, если это действительно документ XML.

Как бы я занялся созданием такого перехвата и нужно ли это вообще?

РЕДАКТИРОВАТЬ

Я попытался выполнить следующую реализацию, но мне сказали, что объект не содержит определения для "GetGlobalService"

using System;
using System.Runtime.InteropServices;
using EnvDTE;
using Microsoft.VisualStudio.Shell;

[Guid("bc4c5e8f-a492-4a44-9e57-ec9ad945140e")]
public class OutlineWindow : ToolWindowPane
{

    private DTE dte;

    public OutlineWindow() : base(null)
    {
        this.Caption = "OutlineWindow";

        this.Content = new OutlineWindowControl();

        dte = Package.GetGlobalService(typeof(EnvDTE.DTE)) as EnvDTE.DTE;
        dte.Events.WindowEvents.WindowActivated += OnWindowActivated;
    }

    private void OnWindowActivated(Window gotFocus, Window lostFocus)
    {
        throw new NotImplementedException();
    }
}

1 ответ

Решение

Благодаря @stuartd мне удалось заставить это работать! Моя проблема была на самом деле в том, что я поместил это в неправильный класс, наследство испортило это.

public class OutlineManager
{
    private DTE dte;

    public OutlineManager()
    {
        dte = Package.GetGlobalService(typeof(DTE)) as DTE;
        dte.Events.WindowEvents.WindowActivated += OnWindowActivated;
    }

    private void OnWindowActivated(Window gotFocus, Window lostFocus)
    {
        //This is run when a new "window"(panel) gains focus (not only the code window though)
    }
}
Другие вопросы по тегам