Подтвердить что ты не робот

Многострочный текстовый блок WPF для большого содержимого

В приложении WPF я хочу создать панель вывода "Найти файлы", в которой я могу передавать большое количество текста без перераспределения памяти в каждой строке, как это сделал бы TextBox.

WPF TextBox имеет одно свойство Text, которое хранит непрерывную строку. Каждый раз, когда я хочу добавить контент, мне нужно сделать textBox.Text += "New Text", что плохо.

В идеале этот элемент управления будет виртуальным и требует минимум ресурсов, только для видимых строк.

Я думал об использовании стандартного ListBox с VirtualizingStackPanel, но он не позволяет выбирать текст по строкам.

(При каждой новой добавленной строке я хочу, чтобы элемент управления обновлялся)

Любое предложение?

4b9b3361

Ответ 1

Если вы не ожидаете в своем приложении более десяти тысяч результатов поиска, достаточно будет использовать элемент управления TextBlock или многострочный текстовый блок TextBox.

Класс TextBox имеет метод AppendText(), который должен быть достаточно быстрым для вас.

Если вам нужна подсветка текста/форматирование, возможно, вы захотите использовать RichTextBox.

Ответ 2

Если у вас действительно большой контент, то, к сожалению, все текстовые поля WPF и подобные элементы управления очень медленные. См. этот вопрос. Вы можете использовать AvalonEdit в качестве замены.

Ответ 3

Вы рассмотрели или попробовали RichTextBox контроль?

Ответ 4

A StringBuilder просто добавьте текст в построитель строк и вместо

textBox.Text += moreText;

do

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

Это должно позаботиться об алгоритме Schlemiel the Painter.

Конечно, построитель строк должен быть членом вашего класса, поэтому он существует через ваш жизненный цикл объекта.