WPF RichTextBox автоматически объединяет два смежных прогона

У меня есть RichTextBox содержащий два Runs:

<RichTextBox>
    <RichTextBox.Document>
        <FlowDocument>
            <FlowDocument.Blocks>
                <Paragraph Name="par">
                    <Run Text="First"/>
                    <Run Text="Second"/>
                </Paragraph>
            </FlowDocument.Blocks>
        </FlowDocument>
    </RichTextBox.Document>
</RichTextBox>

Когда я перебираю Inlines из parЯ вижу три Runs: "Первый", " "(пробел) и "Второй". Все нормально. Но если я удалю второе "" Run (используя клавишу Backspace, например), а затем итерации по Inlines из parЯ вижу только одну "FirstSecond" Run, RichTextBox объединяет два оставшихся Runs в одиночку Run, Однако, если "Первый" и "Второй" Runs есть разные TextFont или же TextWeight ценности, RichTextBox не объединю их, и я увижу два разных Runs: "Первый" и "Второй".

Теперь мой вопрос: как я могу сохранить смежные Runs от слияния автоматически RichTextBox?

Я хотел бы получить поведение, подобное тому, когда Runs есть разные TextFont или же TextWeight значения, но визуально их форматы должны быть равны. Я пытался установить разные Tag значения для разных Runs, но это не помогло. Может быть, есть какой-то "логический" формат, который не влияет на внешний вид Runs, но предупреждает RichTextBox, чтобы различать их.

1 ответ

Хотя я не нашел четкого решения, есть обходной путь. Run имеет Typography свойство, которое, в свою очередь, имеет Int32 AnnotationAlternates имущество. Это свойство определяет тонкую настройку внешнего вида для конкретных символов определенных шрифтов. Если это свойство не используется должным образом, его можно использовать как "логический" формат для Run, Как написано в MSDN:

Если значение AnnotationAlternates больше нуля и выбранный шрифт не поддерживает альтернативы аннотации, отображается форма буквы по умолчанию.

В моем приложении я использую Segoe UI шрифт, который, как оказалось, не поддерживает альтернативы аннотации, поэтому этот обходной путь работает для меня. Если вы используете шрифт, который поддерживает альтернативы аннотаций, вы можете попробовать использовать довольно большие значения AnnotationAlternates свойство, может быть, оно не повлияет на внешний вид текста.

Другие вопросы по тегам