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)
}
}