WPF Multiline TextBox per contenuti di grandi dimensioni
Domanda
In un'applicazione WPF, voglio creare un " Trova nei file " riquadro di output, in cui posso eseguire lo streaming di grandi quantità di testo, senza riassegnare la memoria su ciascuna riga, come farebbe TextBox
.
Il TextBox
WPF ha una singola proprietà Text
che memorizza una stringa contigua. Ogni volta, voglio aggiungere contenuti, devo fare textBox.Text + = " New Text "
, il che è negativo.
Idealmente, quel controllo sarebbe virtuale e richiederebbe un minimo di risorse, solo per le linee visibili.
Ho pensato di utilizzare un ListBox
standard con un VirtualizingStackPanel
, ma non consente la selezione del testo su più righe.
(Ad ogni nuova riga aggiunta, voglio che il controllo si aggiorni)
Qualche suggerimento?
Soluzione
Se nella tua applicazione non ti aspetti più di diecimila risultati di ricerca, un controllo TextBlock o TextBox multilinea di sola lettura sarà di gran lunga sufficiente.
La classe TextBox ha un metodo AppendText () che dovrebbe essere abbastanza veloce per te.
Se hai bisogno di evidenziare / formattare il testo, forse vuoi usare RichTextBox.
Altri suggerimenti
Se hai contenuti davvero grandi, sfortunatamente tutta la casella di testo WPF e controlli simili sono molto lenti. Vedi questa domanda . Puoi utilizzare AvalonEdit in sostituzione.
Hai considerato o provato RichTextBox controllo?
A StringBuilder, basta aggiungere il testo al builder String e invece di farlo
textBox.Text += moreText;
fai
myStringBuilder.Append(moreText);
textBox.Text = myStringBuilder.ToString();
Questo dovrebbe occuparsi dell'algoritmo Schlemiel the Painter .
Naturalmente, il generatore di stringhe dovrebbe essere un membro della tua classe, quindi esiste per tutta la durata del tuo oggetto.