Поделиться через


Модель содержимого WPF

Windows Presentation Foundation (WPF) — это платформа для создания пользовательских интерфейсов, которая предоставляет множество элементов управления и подобных им типов, основная цель которых — отображение различных типов контента. Чтобы определить, какой элемент управления следует использовать или от какого элемента управления наследоваться, необходимо понять, для оптимального отображения каких видов объектов предназначен определённый элемент управления.

В этом разделе описывается модель содержимого для элементов управления WPF и типов, похожих на элементы управления. Модель содержимого описывает, какое содержимое можно использовать в элементе управления. В этом разделе также перечислены свойства контента для каждой модели контента. Свойство содержимого — это свойство, используемое для хранения содержимого объекта.

Классы, содержащие произвольное содержимое

Некоторые элементы управления могут содержать объект любого типа, например строку, объект DateTime или UIElement, который является контейнером для дополнительных элементов. Например, Button может содержать изображение и текст; или CheckBox может содержать значение DateTime.Now.

WPF имеет четыре класса, которые могут содержать произвольное содержимое. В следующей таблице перечислены классы, наследуемые от Control.

Класс, содержащий произвольное содержимое Содержание
ContentControl Один произвольный объект.
HeaderedContentControl Заголовок и один элемент, оба из которых являются произвольными объектами.
ItemsControl Коллекция произвольных объектов.
HeaderedItemsControl Заголовок и коллекция элементов, все из которых являются произвольными объектами.

Элементы управления, наследуемые от этих классов, могут содержать один и тот же тип содержимого и обрабатывать содержимое таким же образом. На следующем рисунке показан один элемент управления из каждой модели содержимого, содержащей изображение и текст:

снимок экрана с четырьмя разными элементами управления, по одному из каждой модели содержимого.

Элементы управления, содержащие один произвольный объект

Класс ContentControl содержит один фрагмент произвольного содержимого. Его свойство "содержимое" — Content. Следующие элементы управления наследуются от ContentControl и используют свою модель содержимого:

На следующем рисунке показаны четыре кнопки: у кнопки Content установлена строка, у кнопки DateTime – объект, у Rectangle– и Panel, содержащий Ellipse и TextBlock.

снимок экрана, на котором показаны четыре кнопки с различными типами контента.

Пример задания свойства Content см. в разделе ContentControl.

Элементы управления, содержащие заголовок и отдельный произвольный объект

Класс HeaderedContentControl наследует от ContentControl и отображает содержимое с заголовком. Он наследует свойство содержимого, Content, от ContentControl и определяет свойство Header типа Object; таким образом, оба могут быть произвольным объектом.

Следующие элементы управления наследуются от HeaderedContentControl и используют свою модель содержимого:

На следующем рисунке показаны два объекта TabItem. Первый TabItem имеет объекты UIElement в роли Header и Content. Для Header задано значение StackPanel, содержащее Ellipse и TextBlock. Для Content задано значение StackPanel, содержащее TextBlock и Label. Второй TabItem содержит строку в Header и TextBlock в Content.

TabControl, использующий различные типы в свойстве Header.

Пример создания объектов TabItem см. в разделе HeaderedContentControl.

Элементы управления, содержащие коллекцию произвольных объектов

Класс ItemsControl наследует от Control и может содержать несколько элементов, таких как строки, объекты или другие элементы. Его свойства содержимого ItemsSource и Items. ItemsSource обычно используется для заполнения ItemsControl набором данных. Если вы не хотите использовать коллекцию для заполнения ItemsControl, можно добавить элементы с помощью свойства Items.

Следующие элементы управления наследуются от ItemsControl и используют свою модель содержимого:

На следующем рисунке показан ListBox, содержащий следующие типы элементов:

снимок экрана со списком с четырьмя типами содержимого.

Элементы управления, содержащие заголовок и коллекцию произвольных объектов

Класс HeaderedItemsControl наследует от ItemsControl и может содержать несколько элементов, таких как строки, объекты или другие элементы, а также заголовок. Он наследует свойства содержимого ItemsControl, ItemsSourceи Items, а также определяет свойство Header, которое может быть произвольным объектом.

Следующие элементы управления наследуются от HeaderedItemsControl и используют свою модель содержимого:

Классы, содержащие коллекцию объектов UIElement

Класс Panel позиционирует и упорядочивает объекты-потомки UIElement. Свойство содержимого имеет значение Children.

Следующие классы наследуются от класса Panel и используют свою модель содержимого:

Дополнительные сведения см. в разделе Обзор панелей.

Классы, влияющие на внешний вид UIElement

Класс Decorator применяет визуальные эффекты к одному дочернему элементу UIElementили вокруг него. Его свойство контента Child. Следующие классы наследуются от Decorator и используют свою модель содержимого:

На следующем рисунке показана TextBox, которая имеет (украшено) Border вокруг него.

Текстовое поле с черной границей
TextBlock с границей

Классы, предоставляющие визуальные отзывы о UIElement

Класс Adorner предоставляет визуальные подсказки пользователю. Например, используйте Adorner для добавления функциональных ручек к элементам или предоставления сведений о состоянии элемента управления. Класс Adorner предоставляет платформу, чтобы создать собственные декоративные элементы. WPF не предоставляет никаких реализованных адорнеров. Дополнительные сведения см. в обзоре декоративных элементов.

Классы, позволяющие пользователям вводить текст

WPF предоставляет три основных элемента управления, которые позволяют пользователям вводить текст. Каждый элемент управления отображает текст по-разному. В следующей таблице перечислены три элемента управления, связанные с текстом, их возможности при отображении текста и их свойствах, содержащих текст элемента управления.

Контроль Текст отображается как Свойство контента
TextBox Обычный текст Text
RichTextBox Форматированный текст Document
PasswordBox Скрытый текст (символы маскируются) Password

Классы, отображающие ваш текст

Для отображения обычного или отформатированного текста можно использовать несколько классов. Вы можете использовать TextBlock для отображения небольших объемов текста. Если требуется отобразить большие объемы текста, используйте элементы управления FlowDocumentReader, FlowDocumentPageViewerили элементы управления FlowDocumentScrollViewer.

TextBlock имеет два свойства содержимого: Text и Inlines. Если вы хотите отобразить текст, использующий согласованное форматирование, свойство Text часто лучше всего подходит. Если вы планируете использовать различные форматирования в тексте, используйте свойство Inlines. Свойство Inlines представляет собой коллекцию объектов Inline, которые указывают, как форматировать текст.

В следующей таблице перечислены свойства содержимого для классов FlowDocumentReader, FlowDocumentPageViewerи FlowDocumentScrollViewer.

Контроль Свойство Контент Тип свойства содержимого
FlowDocumentPageViewer Документ IDocumentPaginatorSource
FlowDocumentReader Документ FlowDocument
FlowDocumentScrollViewer Документ FlowDocument

FlowDocument реализует интерфейс IDocumentPaginatorSource; таким образом, все три класса могут принимать FlowDocument в качестве содержимого.

Классы, форматирующие текст

TextElement и связанные с ним классы позволяют форматировать текст. TextElement объекты содержат и форматируют текст в TextBlock и FlowDocument объектах. Два основных типа объектов TextElement являются элементами Block и элементами Inline. Элемент Block представляет блок текста, например абзац или список. Элемент Inline представляет часть текста в блоке. Многие классы Inline указывают форматирование текста, к которому они применяются. Каждая TextElement имеет собственную модель содержимого. Чтобы узнать больше, см. в обзоре модели содержимого TextElement .

См. также