Visual Studio的MEF推广 - 强制保证金字形更新或重绘
问题描述:
扩展我从演练写作开始的生活:创建由微软提供的保证金雕例如:https://msdn.microsoft.com/en-us/library/ee361745.aspxVisual Studio的MEF推广 - 强制保证金字形更新或重绘
一切工作正常,但我想触发重绘或更新边距字形,只要我用于决定绘制字形的哪条线的数据发生变化。
基本上我在工具窗口中有一个按钮,当用户单击按钮时,我想要一个字形出现在边距中。现在,它不会出现,直到您向后滚动,或显然关闭并重新加载文档。
我研究了这个,并且看到了一些使用IViewTaggerProvider而不是ITaggerProvider的代码示例。在这些情况下,似乎可以将一个LayoutChanged事件的处理程序添加到也包含GetTags方法的ITagger派生类中。但是,我无法成功地将使用ITaggerProvider的代码切换到IViewTaggerProvider,该扩展在运行时崩溃。我不知道这是否会导致解决方案发生变化,或者是否没有必要。
如何强制字形得到渲染?我可以举办某种活动来强制GetTags代码被执行吗?我将如何从课外举办这个活动?从工具窗口例如?
答
您在正确的道路上,从ITaggerProvider更改为IViewTaggerProvider允许我重绘字形。我使用了实现支架匹配标记提供程序部分中的Walkthrough: Displaying Matching Braces示例来进行这些更改。
使用IViewTaggerProvider,你可以调用
TagsChanged?.Invoke(this, new SnapshotSpanEventArgs(
new SnapshotSpan(
SourceBuffer.CurrentSnapshot,
0,
SourceBuffer.CurrentSnapshot.Length)));
在功能显式调用GetTags与去年跨度在目前的快照。
我现在有同样的问题。你能否提一下你是否已经找到解决这个问题的办法。通过删除ComponentModelCache文件可以解决布局更改的异常问题。 – madufit1