Ответ 1
Элемент управления с свойством Text
может принимать только строку и обрабатываться определенным способом, управляемым этим элементом управления. Примерами таких элементов управления являются TextBlock и TextBox.
Элементы управления с свойством Content
могут иметь буквально любое object
, установленное для этого свойства. Эти элементы управления обычно перенаправляют значение в свойство Content на ContentPresenter. ContentPresenter Class содержит этот соответствующий блок:
ContentPresenter использует следующую логику для отображения Контента:
- Если свойство ContentTemplate в ContentPresenter установлено, ContentPresenter применяет этот DataTemplate к свойству Content, а полученный UIElement и его дочерние элементы отображаются, если таковые имеются. Дополнительные сведения о объектах DataTemplate см. В разделе Обзор шаблонов данных.
- Если свойство ContentTemplateSelector в ContentPresenter установлено, ContentPresenter применяет соответствующий DataTemplate к свойству Content, а полученный UIElement и его дочерние элементы отображаются, если таковые имеются.
- Если есть DataTemplate, связанный с типом Контента, ContentPresenter применяет этот DataTemplate к свойству Content, и полученный UIElement и его дочерние элементы, если они есть, отображаются.
- Если Content является объектом UIElement, отображается UIElement. Если UIElement уже имеет родителя, возникает исключение.
- Если есть TypeConverter, который преобразует тип содержимого в UIElement, ContentPresenter использует этот TypeConverter, и отображается отображаемое UIElement.
- Если есть TypeConverter, который преобразует тип Контента в строку, ContentPresenter использует этот TypeConverter и создает TextBlock, чтобы содержать эту строку. Отобразится TextBlock.
- Если содержимое является XmlElement, значение свойства InnerText отображается в TextBlock.
- ContentPresenter вызывает метод ToString в Контенте и создает TextBlock, чтобы содержать строку, возвращаемую ToString. Отобразится TextBlock.
В случае класса TextBlock у вас есть возможность либо установить свойство Text
, либо установить Inlines
свойство. Настройка Text
будет просто отображать текст. Установка Inlines
(которая является по умолчанию, если вы помещаете содержимое внутри тела тега xaml) позволяет вам форматировать текст. Например, вы можете использовать Run с FontWeight установлен на Bold
, чтобы сделать определенное слово или фразу полужирным в предложении. Вы можете использовать LineBreak, чтобы вставить новую строку. Вы можете даже использовать InlineUIContainer для вставки пользовательских элементов интерфейса в текст. Все, что происходит от класса Inline, можно найти в этой коллекции.
TextBlock предназначен для простых бит форматированного текста. Если вы хотите еще более мощные функции стиля документа, вы можете посмотреть FlowDocument, который используется элементами управления, такими как RichTextBox, FlowDocumentScrollViewer и FlowDocumentReader.
Что касается разницы между <TextBlock Text="something" />
и <TextBlock><TextBlock.Text>something</TextBlock.Text></TextBlock>
, то на самом деле это не разница. Это всего лишь два разных способа, с помощью которых вы можете установить свойства на что-то в файле xaml. Вторая версия обычно используется только тогда, когда вам нужно определить дополнительные элементы внутри сеттера.