我尝试获取avalonedit控件的可见文本,但VisualLines[]
只处理带有TextLines[]
的wordwrap,我不知道如何检查TextLine是否在可见区域。< / p>
如果我可以在textview中获取可见文本的开始和结束时间(或长度),但我找不到这样的函数或成员,问题也会解决...
任何人都可以帮助我吗? THX
答案 0 :(得分:4)
您可以使用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
,只有当可见区域的末尾位于文档末尾后才会出现,因此您应该能够在这些情况下假设文档的结尾:
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都有{{1}属性。使用这些文本行,您可以确定哪些文本行可见,然后使用其Height
方法检索可视列,并使用GetCharacterHitFromDistance
计算可视列的文本偏移量。 (这是VisualLine.GetRelativeOffset
方法正在做的事情)