我尝试获取 avalonedit 控件的可见文本,但VisualLines[]
唯一处理 wordwrap 的TextLines[]
,我不知道如何检查 TextLine 是否在可见区域中。
如果我可以在 textview 中获得可见文本的开始和结束偏移(或长度),那么问题也将得到解决,但我没有找到这样的函数或成员......
谁能帮我?谢谢
我尝试获取 avalonedit 控件的可见文本,但VisualLines[]
唯一处理 wordwrap 的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
- 在可见区域内,只有当可见区域的末尾位于文档末尾之后才会发生这种情况,因此您应该能够假设在这些情况下的文件:
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
方法正在做的事情)