Come trovo l'area visualizzabile di un RichTextBox WPF?
-
22-07-2019 - |
Domanda
Sto lavorando su un'app in cui ho un sacco di testo in un RichTextBox. Sto saltando in varie posizioni all'interno del testo, (saltando ad un paragrafo arbitrario per esempio) che sembra funzionare mandando il cursore in quella posizione ma non riesco a controllare dove finisce il cursore.
A volte il cursore finisce nella parte superiore di RichTextBox e talvolta nella parte inferiore. Questo andrebbe bene se fossi interessato solo alla linea su cui si trova il cursore, ma sono interessato all'intero paragrafo. In realtà mi piacerebbe avere il cursore nel mezzo di RichTextBox ogni volta. A meno che il paragrafo non sia più lungo dell'area visualizzabile.
La mia domanda. C'è un modo per determinare l'area visualizzabile di un RichTextBox e quindi fare un calcolo su come posizionare correttamente il cursore? Se avessi quel valore, allora posso decidere se mettere il cursore in mezzo (e sapere dove si trova il centro) o in alto. Grazie per l'aiuto.
Soluzione
Ho risolto questo problema. Un RichTextBox ha una proprietà VerticalOffset che, quando aggiunto alla posizione del puntatore di testo, ti darà l'offset effettivo.
Utilizzando l'offset è possibile utilizzare RichTextBox.ScrollToVerticalOffset per scorrere la casella in base alla proprietà RichTextBox.ActualHeight.
un esempio: supponiamo che io abbia un TextPoint pointer1 nella posizione in cui voglio scorrere
Rect thisposition = pointer1.GetCharacterRect(LogicalDirection.Forward);
richTextBox1.Focus();
richTextBox1.CaretPosition = pointer1;
double totaloffset = thisposition.Top + richTextBox1.VerticalOffset;
richTextBox1.ScrollToVerticalOffset(totaloffset - richTextBox1.ActualHeight / 2);