我正在撰写的扩展程序始于演练:创建由Microsoft提供的边距字形示例:https://msdn.microsoft.com/en-us/library/ee361745.aspx
一切正常,除了我试图触发重绘或更新边距字形时,每当我用来决定绘制字形的数据的变化时。
基本上我在工具窗口中有一个按钮,当用户点击按钮时,我想在边距中出现一个字形。现在,它直到您向外滚动并显然关闭并重新加载文档才会出现。
我研究了这个,并且看过一些使用IViewTaggerProvider而不是ITaggerProvider的代码示例。在这些情况下,似乎可以将LayoutChanged事件的处理程序添加到ITagger派生类中,该类还包含GetTags方法。但是我无法成功将代码从使用ITaggerProvider切换到IViewTaggerProvider,扩展程序在运行时崩溃了。我不知道这是否会导致解决方案的变化,或者是否是不必要的。
如何强制渲染字形?我可以提出某种类型的事件来强制执行GetTags代码吗?我如何从课外提出这个事件?例如,从工具窗口?
答案 0 :(得分:1)
你是在正确的道路上,从ITaggerProvider更改为IViewTaggerProvider允许我重绘字形。我使用了Walkthrough: Displaying Matching Braces示例中的实现大括号匹配标记提供程序部分来进行这些更改。
使用IViewTaggerProvider,您可以调用
TagsChanged?.Invoke(this, new SnapshotSpanEventArgs(
new SnapshotSpan(
SourceBuffer.CurrentSnapshot,
0,
SourceBuffer.CurrentSnapshot.Length)));
在您的函数中显式调用GetTags并遍历当前快照中的跨度。