+-
C#-AvalonEdit-可见文本
我尝试获取avalonedit控件的可见文本,但是VisualLines []仅使用TextLines []处理自动换行,而且我不知道如何检查TextLine是否在可见区域中.

如果我可以在textview中获得可见文本的开始和结束偏移(或长度),但是我没有找到这样的函数或成员,也可以解决该问题.

谁能帮我?谢谢

最佳答案
您可以使用TextView.GetPosition来检索文本视图角落的文档位置:

TextViewPosition? start = textView.GetPosition(new Point(0, 0) + textView.ScrollOffset);
TextViewPosition? end = textView.GetPosition(new Point(textView.ActualWidth, textView.ActualHeight) + textView.ScrollOffset);

您可以使用TextDocument.GetOffset将TextViewPosition转换为偏移量.请注意,当指定点上没有行时,您可以返回null -在可见区域内,只有在可见区域的末端位于文档末端之后才应返回null,因此您应该能够假定末端在这些情况下的文档:

int startOffset = start != null ? document.GetOffset(start.Value.Location) : document.TextLength;
int endOffset = end != null ? document.GetOffset(end.Value.Location) : document.TextLength;

但是,如果愿意,也可以直接使用VisualLine / TextLines:VisualLine.VisualTop会告诉您视觉线的起始位置(Y坐标),并且VisualLine中的每个TextLine都具有Height属性.使用这些,您可以确定哪些文本行可见,然后使用其GetCharacterHitFromDistance方法检索可视列,并使用VisualLine.GetRelativeOffset计算与可视列的文本偏移量. (这是TextView.GetPosition方法的作用)

点击查看更多相关文章

转载注明原文:C#-AvalonEdit-可见文本 - 乐贴网