Ответ 1
Я не пробовал ничего подобного до сих пор, но могу представить два варианта:
Предупреждение → Я не пробовал
Первый метод:
- Создайте подкласс UIElement
- Получить стиль с помощью ControlTemplate для Richtextbox и добавить его в App.xaml
- Добавьте экземпляр вашего подкласса UIElement внутри внутренней панели Scrollviewer из RichTextBox ControlTemplate
- Сделать RTBox доступным для свойства зависимостей в вашем классе с помощью DataBinding в ControlTemplate (если возможно) или любым другим способом, выполняющим работу
- В вашем подклассе UIElement вы повторяете символы документа
- Нарисуйте символ в своем Adorner для каждого пространства и LineBreak, с которым вы сталкиваетесь
- Получить значение Rect персонажа в определенной позиции с помощью RichTextBox. Используйте этот прямоугольник для размещения символов.
Преимущество этого метода заключается в том, что у вас чистое разделение и не нужно подклассифицировать RTFBox, но вы не сможете манипулировать шириной интервала, чтобы освободить место для больших символов. Кроме того, другие разработчики должны знать, что им нужен этот стиль, чтобы получить эту функциональность.
Второй метод:
- Создать пользовательского Adorner
- Украсьте RTBox пользовательским Adorner
- От Adorner вы должны иметь доступ к Ребенку RTBox
- В вашем подклассе UIElement вы повторяете символы документа
- Нарисуйте символ в вашем UIElement для каждого пространства и LineBreak, с которым вы сталкиваетесь
- Я помню, что есть возможность получить Rect персонажа в определенной позиции с RichTextBox. Используйте этот прямоугольник для размещения символов.
Он также без подкласса RTBox. Вы также не можете настроить интервал. В отличие от метода 1, другие разработчики сразу узнают, что эта функциональность была добавлена. Единственным недостатком является то, что вам также придется обрабатывать прокрутку.