Visual Studio MEF扩展 – 强制边缘字形要更新或重绘

我正在编写的扩展程序起源于演练:创建由Microsoft提供的Margin Glyph示例: https : //msdn.microsoft.com/en-us/library/ee361745.aspx

一切正常,除了我试图触发重绘或更新边缘字形,每当我用来决定绘制字形的数据更改时。

基本上我在工具窗口中有一个按钮,当用户单击按钮时,我想要一个字形出现在边距中。 现在,它不会出现,直到您滚动并返回,或显然关闭并重新加载文档。

我研究过这个,并且看过一些使用IViewTaggerProvider而不是ITaggerProvider的代码示例。 在这些情况下,似乎可以将LayoutChanged事件的处理程序添加到ITagger派生类中,该类还包含GetTags方法。 但是我无法成功将代码从使用ITaggerProvider切换到IViewTaggerProvider,扩展程序在运行时崩溃了。 我不知道这是否会导致解决方案的变化,或者是否是不必要的。

如何强制字形被渲染? 我可以提出某种类型的事件来强制执行GetTags代码吗? 我如何从课外提出这个事件? 例如从工具窗口?

你是在正确的道路上,从ITaggerProvider变为IViewTaggerProvider允许我重绘字形。 我在演练:显示匹配括号示例中使用了实现大括号匹配标记提供程序部分来进行这些更改。

使用IViewTaggerProvider,您可以调用

TagsChanged?.Invoke(this, new SnapshotSpanEventArgs( new SnapshotSpan( SourceBuffer.CurrentSnapshot, 0, SourceBuffer.CurrentSnapshot.Length))); 

在您的函数中显式调用GetTags并遍历当前快照中的跨度。