0

我正在尝试为 VS 中的 XML 代码编写大纲(使用 VSIX 模板中的 SDK 的扩展),并且每当用户更改为不同的代码视图/文档时,我都希望获得事件调用。

然后,我计划检查文档类型,如果它确实是一个 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();
    }
}
4

1 回答 1

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)
    }
}
于 2018-01-23T09:16:45.220 回答