考虑一下这个Xaml:
<RichTextBox>
<Document>
<Paragraph>
<Run Text="FirstWord " />
<Run Text="SecondWord"/>
</Paragraph >
<Paragraph>
<Run Text="FirstWord " />
<Run Text="SecondWord"/>
</Paragraph >
</Document>
</RichTextBox >
现在,假设由于某些原因我使用这样的东西:
<StackPanel Orientation = "Vertical">
<StackPanel Orientation = "Horizontal"> // as a Paragraph
<TextBlock Text="FirstWord " />
<TextBlock Text="SecondWord"/>
</StackPanel>
<StackPanel Orientation = "Horizontal"> // another Paragraph
<TextBlock Text="FirstWord " />
<TextBlock Text="SecondWord"/>
</StackPanel>
</StackPanel>
Run或Paragraph或其他TextElement不是控件,因此没有ArrangeOverride
或MesureOverride
方法。我的问题是为什么他们不是控制?是因为性能问题还是测量TextElement
和Control
的大小,排列和渲染之间没有太大区别?换句话说,第一个Xaml比第二个Xaml有什么好处(除了它的外观)?
感谢。
答案 0 :(得分:0)
它们不是控件,因为它们与文档的其余部分不是分开的。您在文档中设置的内容不是子控件,而是文档的内容。渲染完全在RichTextBox内完成。
第一个和第二个示例的主要区别在于RichTextBox允许您创建包含具有不同格式的文本部分的流动文本。虽然可以通过使用普通的TextBlock来实现,但是很难对换行和动态调整大小等内容进行微调。