Как стать автором
Обновить

Комментарии 9

Я вообще в недоумении, почему индекс ищется через координаты?
Вопрос риторический, в сторону .Net а не ТС.
Могу только предположить, что дело в какой-то хитрой архитектуре компонентов и/или адской обратной совместимости с какими-то другими контролами для текста.
С вопросом по выбору такого подхода полностью согласен — без координат проблема указанная в статье даже не возникла бы.
Согласен, это имело бы смысл если бы строки могли бы быть разной высоты, но там вроде не rich text, а plain text.
Word wrapping
Такое чувство, что это рассчитано на другие компоненты, которые, я могу только гадать, работают с Touch сервисами (там же каша полная). Это просто предположение.

Спасибо за статью. Я новичок в wpf, если что, все же, почему не флоу документ?

Решение было продиктовано чем-то типа бритвы Оккама — мне не требовались никакие специфичные функции. Отобразить текст, да достать строку по позиции курсора. Попытка сменить TextBox была только из расчета взять что-то с виртуализацией (без нее у приложения подвисает main-thread на отображение 25 мегабайт). Но таких текстовых контролов не было, поэтому я просто вернул TextBox и написал асинхронное заполнение текста.
Пару лет назад у меня была похожая проблема — нужен был контрол, который может вместить очень длинный лог, который, к тому же, должен очень быстро наполняться. Все стандартные контролы давились и вешали приложение.

Я в C# слаб, но смог найти вот это.
Хотя и не очень понял, что тут происходит, работает это прекрасно — не тормозит, память кушает очень мало.
Подобных решений много. Можно взять ListBox и задать ему шаблоном TextBox'ы — у него тоже встроенная виртуализация. Проблема всех подобных решений — нельзя выделить кусок лога из нескольких строк.
Если лог только для чтения и не подразумевается, что можно скопировать часть данных, то можно взять любое решение с навесной виртуализацией.
Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.