如何修改此示例: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());
}
}
}
}
}
但是,在将光标移动到不同的代码行或更改代码后添加字形。在点击按钮后立即添加字形我该怎么做?
答案 0 :(得分:2)
作为一条不相关的建议:您不应该在GetTags中使用DTE.ActiveDocument,原因如下:
答案 1 :(得分:0)
这是从我的回答here复制的。基本上,从使用ITaggerProvider更改为IViewTaggerProvider允许我重绘字形。我使用了Walkthrough: Displaying Matching Braces示例中的实现大括号匹配标记提供程序部分来进行这些更改。
使用IViewTaggerProvider,您可以调用
TagsChanged?.Invoke(this, new SnapshotSpanEventArgs(
new SnapshotSpan(
SourceBuffer.CurrentSnapshot,
0,
SourceBuffer.CurrentSnapshot.Length)));
在您的函数中显式调用GetTags并遍历当前快照中的跨度。