我正在开发Visual Studio扩展,我需要在源代码窗口中放置标签,分类器或装饰物。我已经通过一些源代码分析获得了一些行/列信息。第一步,我可以将它们成功放置。当用户继续修改源代码时,就会出现问题:我的“标记”很快就变得不同步。
我已经找到以下启动文档:https://docs.microsoft.com/en-us/visualstudio/extensibility/walkthrough-creating-a-margin-glyph?view=vs-2017和其他类似页面。我的理解是,默认方法是每次修改或在屏幕上滚动代码时,都会调用主放置例程(例如“ IEnumerable> ITagger.GetTags(NormalizedSnapshotSpanCollection spans)”)。当源代码分析既简单又快速时,这很好。您可以经常刷新。
但是,我不能这样做。我的分析更加复杂和漫长。我不能一直刷新。我了解我需要在源代码窗口中将“标记”设为“相对文本”,这意味着我希望它们被锚定到某些文本(最初位于此行/列)并在用户继续修改源代码时随其移动周围的代码。
是否有某种方式可以将“标记”(字形,语法着色标记,文本中的图形标记以及BTW其他所有标记,例如工具提示,灯泡建议,轮廓文本等)设置为“文本-relative”,以便根据用户类型自动更新?有一些例子吗?
或者当用户修改代码时,我是否必须自己更新“标记”展示位置?如何获取修改信息(原始光标位置,添加/删除的字符/行数)?我似乎无法通过给定的SnapshotSpan对象找到它。
不确定您是否尝试过以下链接,它是否符合您对“相对文本”标签的要求
创建相对于文本的装饰扩展名
编辑器文本装饰模板创建相对于文本的装饰使用框装饰文本字符“ a”的所有实例具有红色轮廓和蓝色背景。它是相对于文本的因为该框始终覆盖'a'字符,即使它们是移动或重新格式化。