【发布时间】:2011-04-28 20:24:16
【问题描述】:
我尝试获取 avalonedit 控件的可见文本,但 VisualLines[] 仅处理带有 TextLines[] 的自动换行,我不知道如何检查 TextLine 是否在可见区域中。
如果我可以在 textview 中获取可见文本的起始和结束偏移(或长度),但我没有找到这样的函数或成员...
谁能帮帮我?谢谢
【问题讨论】:
标签: c# avalonedit
我尝试获取 avalonedit 控件的可见文本,但 VisualLines[] 仅处理带有 TextLines[] 的自动换行,我不知道如何检查 TextLine 是否在可见区域中。
如果我可以在 textview 中获取可见文本的起始和结束偏移(或长度),但我没有找到这样的函数或成员...
谁能帮帮我?谢谢
【问题讨论】:
标签: c# avalonedit
您可以使用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 方法的作用)
【讨论】:
TextView.GetPosition 的当前参考页面的链接:avalonedit.net/documentation/html/…