Да есть уже какие-то контролы сторонние типа AvalonEdit, есть FlowDocument и пр.
Но бывают задачи не совсем стандартные когда нельзя воспользоваться подобными решениями и нужно делать свою логику.
Например вы хотите сделать инструмент аналог Merge , т.е. где сравниваются два текстовых файла со своей логикой разметки, подстветки и UI для мержа внутри контролов.
Решение в лоб — брать канвас и на нем рисовать текст работает очень медленно особенно на больших экранах.
Можно ли достичь производительности редактора Visual Studio , IDEA и др.
Или такие вещи только на С++ делаются.
p.s. про кеширование в битмеп думал но это работает только если нет скроллинга.
Когда начинается скроллинг то приходится перерисовывать весь экран учитываем что скроллинг часто не плавный ( там можно перерисовать только новую часть )
”Жить стало лучше... но противнее. Люди которые ставят точку после слова лучше становятся сторонниками Путина, наши же сторонники делают акцент на слове противнее ( ложь, воровство, лицемерие, вражда )." (с) Борис Немцов