Основная цель приложения, над которым я работаю в WPF, - разрешить редактирование и, как следствие, печать текстов песен с гитарными аккордами поверх них.
Вы наверное, видели аккорды, даже если вы не играете ни на каком инструменте. Чтобы дать вам представление, это выглядит так:
E E6
I know I stand in line until you
E E6 F#m B F#m B
think you have the time to spend an evening with me
Но вместо этого уродливого шрифта с одинарным интервалом я хочу использовать шрифт Times New Roman
с кернингом для текста и аккордов (аккорды выделены жирным шрифтом). И я хочу, чтобы пользователь мог редактировать это.
Этот сценарий не поддерживается для RichTextBox
. Вот некоторые из проблем, которые я не знаю, как решить:
TextPointer
строки текста). Когда пользователь редактирует текст, я хочу, чтобы аккорд оставался поверх правильного символа. Пример: .
E E6
I know !!!SOME TEXT REPLACED HERE!!! in line until you
.
E E6
think you have the time to spend an
F#m B F#m B
evening with me
.
F#m E6
...you have the ti me to spend...
Ta VA
и аккорд поверх A
. Я хочу, чтобы текст был похож на , а не на . Второе изображение не имеет кернинга между V
и A
. Оранжевые линии служат только для визуализации эффекта (но они отмечают смещение по оси x, где будет размещаться аккорд). Код, использованный для создания первого образца, - Ta VA
, а для второго образца Ta V A
. Есть идеи, как заставить RichTextBox
сделать это? Или есть лучший способ сделать это в WPF? Могу ли я разделить на подклассы Inline
или Run
? Приветствуются любые идеи, хаки, магия TextPointer
, код или ссылки на связанные темы.
Я изучаю 2 основных направления решения этой проблемы, но оба приводят к другим проблемам, поэтому я задать новый вопрос:
RichTextBox
в редактор аккордов - взгляните на Как я могу создать подкласс класса Inline? . Создайте новый редактор из отдельных компонентов например Panel
s TextBox
es и т. д., как предлагается в HB answer . Это потребовало бы большого количества кодирования, а также привело бы к следующим (нерешенным) проблемам:
Высококачественный ответ Маркуса Хюттера показал мне, что с RichTextBox можно сделать гораздо больше
Тогда я ожидал, когда сам пытался настроить его под свои нужды. Только сейчас у меня было время подробно изучить ответ. Маркус может быть RichTextBox
волшебником. Мне нужно помочь мне с этим, но есть и некоторые нерешенные проблемы с его решением:
LineHeight
установлено значение 25
или другое фиксированное значение для всего документа, это приведет к тому, что строки без аккордов будут иметь «пустые строки» над ними. Когда есть только аккорды и нет текста, для них не будет места. Есть и другие второстепенные проблемы, но я либо думаю, что смогу их решить, либо считаю их неважными. В любом случае, я думаю, что ответ Маркуса действительно ценен - не только для того, чтобы показать мне возможный путь, но и для демонстрации общей схемы использования RichTextBox
с украшением.