AvalonEdit - 可见文本

时间:2010-10-21 20:41:23

标签: c# avalonedit

我尝试获取avalonedit控件的可见文本,但VisualLines[]只处理带有TextLines[]的wordwrap,我不知道如何检查TextLine是否在可见区域。< / p>

如果我可以在textview中获取可见文本的开始和结束时间(或长度),但我找不到这样的函数或成员,问题也会解决...

任何人都可以帮助我吗? THX

1 个答案:

答案 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方法正在做的事情)