如何修改此示例: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:
- GetTags 应尽可能快...调用 DTE 方法很少会很快。
- 假设您打开了两个文件,并且为非事件文件调用 GetTags。这将使两个文件查看相同的文件名,这可能是不好的。有代码here显示如何从 ITextBuffer 中获取文件名。
关于visual-studio-extensions - Visual Studio SDK - 如何在调用的命令上添加边距字形?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32225523/