我有一个包含两个Runs
的RichTextBox
:
<RichTextBox>
<RichTextBox.Document>
<FlowDocument>
<FlowDocument.Blocks>
<Paragraph Name="par">
<Run Text="First"/>
<Run Text="Second"/>
</Paragraph>
</FlowDocument.Blocks>
</FlowDocument>
</RichTextBox.Document>
</RichTextBox>
当我遍历par
的Inlines
时,我看到三个Runs
:"第一","(空间(和"第二"。还行。但是如果我删除第二个" "Run
(例如使用退格键(,然后遍历par
的Inlines
,我只看到一个"FirstSecond"Run
。 RichTextBox
将剩余的两个Runs
合并为单个Run
。但是,如果"第一"和"第二"Runs
具有不同的TextFont
或TextWeight
值,RichTextBox
不会合并它们,我会看到两个不同的Runs
:"第一"和"第二"。
现在我的问题:如何保护相邻的Runs
不被RichTextBox
自动合并?
我希望获得类似于Runs
具有不同TextFont
或TextWeight
值时的行为,但从视觉上看它们的格式应该是相同的。我尝试为不同的Runs
设置不同的Tag
值,但没有帮助。也许,有一些"逻辑"格式,不会影响Runs
的外观,但警告 RichTextBox 区分它们。
虽然我还没有找到明确的解决方案,但有一个解决方法。 Run
拥有Typography
财产,而财产又拥有Int32
AnnotationAlternates
财产。此属性定义对特定字体的特定字符的 Outlook 进行微调。如果未按预期使用此属性,则可以将其用作Run
的"逻辑"格式。正如MSDN中所写:
如果"注释替代"的值大于零,并且 所选字体不支持注释替代,默认形式 的信件将显示。
在我的应用程序中,我使用Segoe UI
字体,事实证明,它不支持注释替代,因此此解决方法对我有用。如果使用支持注释替代的字体,则可以尝试使用AnnotationAlternates
属性的相当大的值,也许它不会影响文本的外观。