C # WPF RichTextBox ограничивает форматирование текста видимым текстом

У меня есть RichTextBox, отображающий FlowDocument большого размера (> 10 тыс. Строк). Я пытаюсь применить форматирование текста ко всему документу. Это займет некоторое время.

Есть ли способ сфокусировать форматирование только на видимых частях документа?

Для информации: я пытаюсь выполнить поиск по содержимому RichTextBox и выделить все совпадающие вхождения. Функция поиска основана на этот. Я использую следующий код, чтобы «выделить» каждое найденное совпадение.

protected void ColorTextRanges(Color color)
{
    foreach ( var textRange in locatedInstances )
    {
        if ( textRange != null )
        {
            textRange.ApplyPropertyValue( TextElement.BackgroundProperty, new SolidColorBrush( color ) );
        }
    }
}

person TK.    schedule 18.08.2011    source источник
comment
Вы зацикливаетесь на цвете, принимая время рендеринга в пользовательском интерфейсе. Возможно, попробуйте FlowDocumentReader, так как он может быть быстрее.   -  person paparazzo    schedule 18.08.2011
comment
Сам поиск занимает ‹0,5 с, он перебирает все совпадения и применяет настраиваемое форматирование, которое занимает все дополнительное время.   -  person TK.    schedule 18.08.2011


Ответы (2)


Вместо того, чтобы создавать кисть в петле, создайте ее снаружи и повторно используйте. Не будет большим, но немного поможет. И вы можете протестировать BackgroundProperty и установить его только в том случае, если он неправильный - это может замедлить работу, но если большая часть документа уже имеет правильный цвет, это должно помочь.

    protected void ColorTextRanges(Color color)
    {
        SolidColorBrush brush = new SolidColorBrush( color );
        foreach ( var textRange in locatedInstances )
        {
            if ( textRange != null )
            {
                textRange.ApplyPropertyValue( TextElement.BackgroundProperty,  brush);
            }
        }
   }
person paparazzo    schedule 18.08.2011

Лучшее повышение производительности, которое я обнаружил, заключалось в обновлении документа, когда он не отображался на экране. Не уверен, почему это так, но я могу предположить, что что-то в экранном буфере не обновляется.

person TK.    schedule 29.08.2011