Visual Studio MEF扩展-强制更新或重新绘制边距轮廓

本文关键字:新绘制 绘制 轮廓 扩展 MEF Studio 更新 Visual | 更新日期: 2024-10-24 00:24:44

我正在编写的扩展从微软提供的"演练:创建保证金雕文"示例开始:https://msdn.microsoft.com/en-us/library/ee361745.aspx

一切都很好,除了每当我用来决定在哪条线上绘制字形的数据发生变化时,我试图触发重新绘制或更新边距字形。

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

我对此进行了研究,并看到了一些使用IViewTaggerProvider而不是ITaggerProvider的代码示例。在这些情况下,LayoutChanged事件的处理程序似乎可以添加到ITagger派生类中,该类也包含GetTags方法。然而,我无法成功地将代码从使用ITaggerProvider切换到IViewTaggerProvider,扩展在运行时崩溃。我不知道这是一个会带来解决方案的改变,还是没有必要。

如何强制渲染图示符?我可以引发某种事件来强制执行GetTags代码吗?我该如何从课堂之外提出这个事件?例如,从工具窗口?

Visual Studio MEF扩展-强制更新或重新绘制边距轮廓

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

使用IViewTaggerProvider,您可以调用

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

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