2010-10-21 9 views
3

J'essaie d'obtenir le texte visible du contrôle avalonedit, mais le VisualLines[] ne traite que WordWrap avec TextLines[] et je ne sais pas comment vérifier si un TextLine est dans la zone visible ou non.AvalonEdit - Texte Visible

Le problème serait également résolu si je peux obtenir le début et endOffset (ou longueur) du texte visible dans le textview mais je na pas trouver une telle fonction ou un membre ...

Quelqu'un peut-il me aider ? Thx

Répondre

4

Vous pouvez utiliser TextView.GetPosition pour récupérer la position de documents pour les coins de la vue du texte:

TextViewPosition? start = textView.GetPosition(new Point(0, 0) + textView.ScrollOffset); 
TextViewPosition? end = textView.GetPosition(new Point(textView.ActualWidth, textView.ActualHeight) + textView.ScrollOffset); 

Vous pouvez utiliser TextDocument.GetOffset pour convertir un TextViewPosition en un décalage. Notez que vous pouvez retourner null lorsqu'il n'y a pas de ligne au point spécifié - dans la zone visible, cela ne devrait se produire que si la fin de la zone visible est derrière la fin du document, donc vous devriez pouvoir supposer la fin du document dans les cas:

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

Cependant, si vous le souhaitez, vous pouvez également travailler directement avec les VisualLine/TextLines: VisualLine.VisualTop vous indique où une ligne visuelle commence (coordonnée Y), et chaque TextLine dans le VisualLine a une propriété Height. À l'aide de ceux-ci, vous pouvez déterminer les lignes de texte visibles, puis utiliser leur méthode GetCharacterHitFromDistance pour récupérer une colonne visuelle et utiliser VisualLine.GetRelativeOffset pour calculer le décalage de texte à partir de la colonne visuelle. (C'est ce que fait la méthode TextView.GetPosition)

+0

Aweseome! Maintenant, mon orthographe fonctionne parfaitement. Merci beaucoup! – zee

+0

À titre de référence personnelle, voici un lien vers la page de référence actuelle pour 'TextView.GetPosition' dans la documentation d'AvalonEdit: http://avalonedit.net/documentation/html/070c6779-a358-33f0-09f4-7a3b49d36ee7.htm – wil