为什么TextElemt类不是从Control类派生的?

时间:2013-01-05 19:48:15

标签: c# wpf block paragraph

考虑一下这个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>

RunParagraph或其他TextElement不是控件,因此没有ArrangeOverrideMesureOverride方法。我的问题是为什么他们不是控制?是因为性能问题还是测量TextElementControl的大小,排列和渲染之间没有太大区别?换句话说,第一个Xaml比第二个Xaml有什么好处(除了它的外观)?

感谢。

1 个答案:

答案 0 :(得分:0)

它们不是控件,因为它们与文档的其余部分不是分开的。您在文档中设置的内容不是子控件,而是文档的内容。渲染完全在RichTextBox内完成。

第一个和第二个示例的主要区别在于RichTextBox允许您创建包含具有不同格式的文本部分的流动文本。虽然可以通过使用普通的TextBlock来实现,但是很难对换行和动态调整大小等内容进行微调。