Pregunta

En una aplicación WPF, quiero construir un " Buscar en archivos " panel de salida, en el que puedo transmitir gran cantidad de texto, sin reasignar memoria en cada línea, como lo haría el TextBox .

El TextBox de WPF tiene una sola propiedad Text que almacena una cadena contigua. Cada vez que quiero agregar contenido, necesito hacer textBox.Text + = " New Text " , lo cual es malo.

Idealmente, ese control sería virtual y requeriría un mínimo de recursos, solo para las líneas visibles.

Pensé en usar un ListBox estándar con un VirtualizingStackPanel , pero no permite la selección de texto entre líneas.

(En cada nueva línea agregada, quiero que el control se actualice)

¿Alguna sugerencia?

¿Fue útil?

Solución

Si no espera mucho más de diez mil resultados de búsqueda en su aplicación, un control TextBlock o un TextBox multilínea de solo lectura será suficiente por mucho.

La clase TextBox tiene un método AppendText () que debería ser lo suficientemente rápido para usted.

Si necesita resaltar / formatear texto, entonces tal vez quiera usar RichTextBox.

Otros consejos

Si tiene contenido realmente grande, desafortunadamente todos los cuadros de texto de WPF y controles similares son muy lentos. Consulte esta pregunta . Puede usar AvalonEdit como reemplazo.

¿Ha considerado o probado el RichTextBox control?

Un StringBuilder, simplemente agregue el texto al generador de cadenas y en lugar de hacerlo

textBox.Text += moreText;

hacer

myStringBuilder.Append(moreText);
textBox.Text = myStringBuilder.ToString();

Esto debería ocuparse del algoritmo Schlemiel the Painter .

Por supuesto, el generador de cadenas debe ser miembro de su clase para que exista durante la vida útil de su objeto.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top