【问题标题】:AvalonEdit - Visible TextAvalonEdit - 可见文本
【发布时间】:2011-04-28 20:24:16
【问题描述】:

我尝试获取 avalonedit 控件的可见文本,但 VisualLines[] 仅处理带有 TextLines[] 的自动换行,我不知道如何检查 TextLine 是否在可见区域中。

如果我可以在 textview 中获取可见文本的起始和结束偏移(或长度),但我没有找到这样的函数或成员...

谁能帮帮我?谢谢

【问题讨论】:

    标签: c# avalonedit


    【解决方案1】:

    您可以使用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 方法的作用)

    【讨论】:

    • 太棒了!现在我的拼写检查器工作得很好。非常感谢!
    • 作为个人参考,这里是 AvalonEdit 文档中TextView.GetPosition 的当前参考页面的链接:avalonedit.net/documentation/html/…
    猜你喜欢
    • 2012-08-05
    • 1970-01-01
    • 1970-01-01
    • 2014-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多