2010-10-21 72 views
3

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

的问题也将得到解决,如果我能得到TextView的开始 - 和可见的文本endoffset(或长度),但我没有找到这样的功能或成员...

谁能帮助我? THX

回答

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,因此您应该能够假设结束内的每一个TextLine VisualLine.VisualTop告诉你视线开始的地方(Y坐标),并且:

int startOffset = start != null ? document.GetOffset(start.Value.Location) : document.TextLength; 
int endOffset = end != null ? document.GetOffset(end.Value.Location) : document.TextLength; 

但是,如果你愿意,你也可以直接与VisualLine/TextLine的工作:在这种情况下的文件VisualLine有一个Height属性。使用这些,您可以确定哪些文本行可见,然后使用它们的GetCharacterHitFromDistance方法检索可视列,并使用VisualLine.GetRelativeOffset来计算可视列的文本偏移量。 (这是TextView.GetPosition方法正在做什么)

+0

Aweseome!现在我的拼写检查工作正常。非常感谢你! – zee 2010-10-21 21:31:38

+0

作为个人参考,以下是AvalonEdit文档中“TextView.GetPosition”当前参考页面的链接:http://avalonedit.net/documentation/html/070c6779-a358-33f0-09f4-7a3b49d36ee7.htm – wil 2014-11-25 05:19:50