【问题标题】:Visual Studio MEF Extension - Force Margin Glyphs To Be Updated or RedrawVisual Studio MEF 扩展 - 强制更新或重绘边距字形
【发布时间】:2016-04-21 06:02:59
【问题描述】:

我正在编写的扩展从演练开始:创建 Microsoft 提供的 Margin Glyph 示例:https://msdn.microsoft.com/en-us/library/ee361745.aspx

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

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

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

如何强制渲染字形?我可以引发某种事件来强制执行 GetTags 代码吗?我将如何从课堂外提出该事件?例如从工具窗口?

【问题讨论】:

  • 我现在也有同样的问题。您能否提及您是否找到了解决此问题的任何解决方法。可以通过删除 ComponentModelCache 文件来克服布局更改的异常。

标签: c# visual-studio mef visual-studio-extensions


【解决方案1】:

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

使用 IViewTaggerProvider,您可以调用

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多