需要检测ITextView中显示的行何时发生变化

时间:2015-08-04 22:36:14

标签: c# visual-studio-2013 visual-studio-extensions visual-studio-sdk

我正在撰写管理某些装饰品的扩展程序。其中一些可以跨越几个文本行。这个想法是装饰与跨度中的每一行相关联。因此,即使顶行从顶部滚动,我也希望在剩余的行上显示装饰的翻译/剪辑版本。

我希望每当滚动视图时都会触发ITextView.LayoutChanged事件(如"编辑内部" MSDN中的文章中所述)。但是,在某些情况下它并没有。即,滚动文件末尾时。由于不需要格式化新行,因此不会触发LayoutChanged。这意味着最终我的装饰所附加的线不再在TextViewLines中,所以装饰消失了。

不幸的是,ITextView中没有ViewportTopChanged事件。 (奇怪的是有视图端口左,宽度和高度更改事件,但没有顶部更改事件。)我尝试使用IScrollMap来检测滚动,但它的MappingChanged事件在这种情况下不会触发

谢谢,

2 个答案:

答案 0 :(得分:0)

我不知道为什么我收到之前发布的结果,但现在我好像在文件末尾收到LayoutChanged事件。

答案 1 :(得分:0)

您可以尝试ITextBuffer.Changed事件,只要textview的内容发生变化(添加/删除/修改),就会触发此事件...在此处查看更多内容 - https://msdn.microsoft.com/en-us/library/microsoft.visualstudio.text.itextbuffer.changed.aspx