在WPF(甚至是Windows 8或8.1应用程序)中,您有三种方法可以在控件中添加文本。
Run
元素<{1}}元素
TextBlock
<TextBlock>
<Run>My text</Run>
</TextBlock>
属性作为Text
元素的属性
TextBlock
<TextBlock Text="My text" />
属性作为Text
元素
TextBlock
这三种方法有什么区别?为什么您必须<TextBlock>
<TextBlock.Text>my text</TextBlock.Text>
</TextBlock>`
使用Text
而TextBlock
使用Content
?
答案 0 :(得分:26)
具有Text
属性的控件只能接受字符串,并以该控件处理的特定方式呈现。此类控件的示例包括TextBlock和TextBox。
具有Content
属性的控件实际上可以为该属性设置任何object
。这些控件通常会将值转发给Content上的ContentPresenter属性。 ContentPresenter Class文档有相关的块:
ContentPresenter使用以下逻辑显示内容:
- 如果设置了ContentPresenter上的ContentTemplate属性,则ContentPresenter会将该DataTemplate应用于Content属性,并显示生成的UIElement及其子元素(如果有)。有关DataTemplate对象的更多信息,请参阅数据模板概述。
- 如果设置了ContentPresenter上的ContentTemplateSelector属性,则ContentPresenter会将相应的DataTemplate应用于Content属性,并显示生成的UIElement及其子元素(如果有)。
- 如果存在与Content类型相关联的DataTemplate,则ContentPresenter会将该DataTemplate应用于Content属性,并显示生成的UIElement及其子元素(如果有)。
- 如果Content是UIElement对象,则显示UIElement。如果UIElement已经有父项,则会发生异常。
- 如果有一个将内容类型转换为UIElement的TypeConverter,则ContentPresenter将使用该TypeConverter并显示生成的UIElement。
- 如果有一个TypeConverter将Content的类型转换为字符串,ContentPresenter将使用该TypeConverter并创建一个TextBlock来包含该字符串。显示TextBlock。
- 如果内容是XmlElement,则InnerText属性的值将显示在TextBlock中。
- ContentPresenter在Content上调用ToString方法并创建一个TextBlock以包含ToString返回的字符串。显示TextBlock。
对于TextBlock类,您可以选择设置Text
属性,也可以设置Inlines
属性。设置Text
只会呈现文本。设置Inlines
(如果您将内容放在xaml标记的正文中,则是默认设置)允许您格式化文本。例如,您可以使用Run将FontWeight设置为Bold
,以便在句子中使某个单词或短语加粗。您可以使用LineBreak插入新行。您甚至可以使用InlineUIContainer在文本中插入自定义UI元素。任何派生自Inline类的东西都可以进入这个集合。
TextBlock适用于格式化文本的简单位。如果您想要更强大的文档样式功能,可以查看FlowDocument,RichTextBox,FlowDocumentScrollViewer和FlowDocumentReader等控件使用这些功能。
就<TextBlock Text="something" />
和<TextBlock><TextBlock.Text>something</TextBlock.Text></TextBlock>
之间的差异而言,实际上没有区别。这些只是两种不同的方式,您可以通过它们在xaml文件中设置属性。第二个版本通常仅在需要在setter中定义其他元素时使用。
答案 1 :(得分:4)
关于'属性元素'的简短说明
这只是对泽维尔很好的回答的补充说明。
实际上之间没有太大区别:
<TextBlock Text="something" />
和
<TextBlock><TextBlock.Text>something</TextBlock.Text></TextBlock>
这是因为Text
属性属于String
类型,这是一种简单类型,可以像Text="something"
一样直接设置。
上面示例中的后一种语法称为“属性元素”。 它通常在将元素的属性设置为复杂类型时使用。
示例:
<Button>
<Button.Content>
<Rectangle Height="20", Width="20", Fill="Black"/>
</Button.Content>
</Button>
在此示例中,您可以直接设置“矩形”而不使用Button.Content
,但对于其他示例,语法可用于设置复杂类型的属性。