Модель содержимого 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.
Пример создания объектов 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 .
См. также
.NET Desktop feedback