visual-studio-extensions - Visual Studio SDK - 如何在调用的命令上添加边距字形?

标签 visual-studio-extensions vsix vs-extensibility visual-studio-sdk

如何修改此示例:https://msdn.microsoft.com/en-us/library/ee361745.aspx单击我添加的按钮时将字形添加到边距?

我有一个按钮可以创建一种特殊的断点。我希望这种能被我自己的边距字形识别。所以我在 Tagger 类中编写了 GetTags 方法,如下所示:

    IEnumerable<ITagSpan<MyBreakpointTag>> ITagger<MyBreakpointTag>.GetTags(NormalizedSnapshotSpanCollection spans)
    {
        if (BreakpointManager != null)
        {
            DTE2 ide = ServiceProvider.GlobalProvider.GetService(typeof(DTE)) as DTE2;
            Document document = ide.ActiveDocument;

            foreach (SnapshotSpan span in spans)
            {
                ITextSnapshot textSnapshot = span.Snapshot;
                foreach (ITextSnapshotLine textSnapshotLine in textSnapshot.Lines)
                {
                    if (BreakpointManager.IsMyBreakpointAt(document.FullName, textSnapshotLine.LineNumber + 1))
                    {
                        yield return new TagSpan<MyBreakpointTag>(new SnapshotSpan(textSnapshotLine.Start, 1),
                                new MyBreakpointTag());
                    }
                }
            }
        }
    }

但是,在将光标移动到不同的代码行或对代码进行更改后,会添加字形。我需要做什么才能在单击按钮后立即添加字形?

最佳答案

每当布局发生时,编辑器都会调用 GetTags,但编辑器不会出于任何随机原因调用它。 (想一想:它如何知道何时给您打电话?)您需要从标记器引发 TagsChanged 事件来表示给定范围的标签已更改,然后它将再次调用 GetTags 进行刷新。

作为一条不相关的建议:出于以下几个原因,您不应该在 GetTags 中使用 DTE.ActiveDocument:

  1. GetTags 应尽可能快...调用 DTE 方法很少会很快。
  2. 假设您打开了两个文件,并且为非事件文件调用 GetTags。这将使两个文件查看相同的文件名,这可能是不好的。有代码here显示如何从 ITextBuffer 中获取文件名。

关于visual-studio-extensions - Visual Studio SDK - 如何在调用的命令上添加边距字形?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32225523/

相关文章:

visual-studio - 如何安装扩展程序以便所有用户都可以访问它?

visual-studio-2010 - 在 Visual Studio 2010 中查找命令/菜单 GUID/ID

visual-studio-2012 - 使用 Typescript 0.9 进行保存时编译

c# - VS2010扩展性: Custom document formatting

visual-studio - 如何将调试符号包含到 .vsix 包中

visual-studio-2010 - Visual Studio 2010 中服务提供商的最终列表?

visual-studio-2010 - VS2012下开发VS2010的VSIX?

installation - 我可以通过VSIX安装程序将二进制文件安装到GAC中吗?

c# - Visual Studio 可扩展性 - 自定义语言文本编辑器设置

visual-studio-2015 - VS2015 扩展 - 获取错误列表中的选定项