3

我尝试获取 avalonedit 控件的可见文本,但VisualLines[]唯一处理 wordwrap 的TextLines[],我不知道如何检查 TextLine 是否在可见区域中。

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

谁能帮我?谢谢

4

1 回答 1

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 都有一个Height属性。使用这些,您可以确定哪些文本行是可见的,然后使用它们的GetCharacterHitFromDistance方法来检索可视列,并用于VisualLine.GetRelativeOffset计算与可视列的文本偏移量。(这就是该TextView.GetPosition方法正在做的事情)

于 2010-10-21T21:15:41.033 回答