【问题标题】:Need to detect whenever the displayed lines change in an ITextView需要检测 ITextView 中显示的行何时更改
【发布时间】:2015-08-04 22:36:13
【问题描述】:

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

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

很遗憾,ITextView 中没有 ViewportTopChanged 事件。 (奇怪的是有视口左、宽、高变化事件,但没有顶部变化事件。)我尝试使用 IScrollMap 来检测滚动,但在这种情况下也不会触发 MappingChanged 事件。

谢谢,

【问题讨论】:

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


    【解决方案1】:

    我不知道为什么我得到了之前发布的结果,但现在我似乎在文件末尾得到了 LayoutChanged 事件。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-10-15
        • 2020-12-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多