2009-08-04 6 views
1

Je travaille sur une application où j'ai un tas de texte dans un RichTextBox. Je saute à diverses positions dans le texte, (sautant à un paragraphe arbitraire par exemple) qui semble fonctionner en envoyant le curseur à cette position mais je ne peux pas sembler contrôler où dans la zone visible le caret finit vers le haut.Comment trouver la zone d'affichage d'un RichTextBox WPF?

Parfois, le curseur se place en haut de la RichTextBox et parfois en bas. Ce serait bien si j'étais seulement intéressé par la ligne que le caret est sur, mais je suis intéressé par le paragraphe entier.Idéalement, je voudrais obtenir le signe au milieu de la RichTextBox à chaque fois. Sauf si le paragraphe est plus long que la zone visible.

Ma question. Existe-t-il un moyen de déterminer la zone visible d'un RichTextBox et de faire un calcul sur comment positionner correctement le curseur? Si j'avais cette valeur, je pouvais alors décider de mettre le signe au centre (et de savoir où se trouve le milieu) ou en haut. Merci pour ton aide.

Répondre

0

J'ai résolu ce problème. RichTextBox possède une propriété VerticalOffset qui, lorsqu'elle est ajoutée à la position du pointeur de texte, vous donne le décalage réel. En utilisant l'offset, vous pouvez utiliser RichTextBox.ScrollToVerticalOffset pour faire défiler la boîte en fonction de la propriété RichTextBox.ActualHeight.

un exemple: suppose que j'ai un TextPoint pointer1 à la position que je veux faire défiler jusqu'à

Rect thisposition = pointer1.GetCharacterRect(LogicalDirection.Forward); 

richTextBox1.Focus(); 
richTextBox1.CaretPosition = pointer1; 


double totaloffset = thisposition.Top + richTextBox1.VerticalOffset; 
richTextBox1.ScrollToVerticalOffset(totaloffset - richTextBox1.ActualHeight/2);