我尝试获取avalonedit控件的可见文本,但VisualLines[]只使用TextLines[]处理自动换行,并且我不知道如何检查TextLine是否在可见区域中。
如果我可以在textview中获得可见文本的起始和结束偏移(或长度),但我没有找到这样的函数或成员,问题也就解决了……
有谁可以帮我?Thx
发布于 2010-10-22 05:15:41
您可以使用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方法正在做的事情)
https://stackoverflow.com/questions/3991735
复制相似问题