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

sth*_*ede 9 c# mef visual-studio visual-studio-extensions

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

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

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

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

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

nic*_*o21 1

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

使用 IViewTaggerProvider,您可以调用

TagsChanged?.Invoke(this, new SnapshotSpanEventArgs(
                              new SnapshotSpan(
                                      SourceBuffer.CurrentSnapshot,
                                      0, 
                                      SourceBuffer.CurrentSnapshot.Length)));
Run Code Online (Sandbox Code Playgroud)

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