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


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

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

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

В этом разделе содержатся следующие подразделы.

  • Классы с произвольным содержимым
  • Классы, содержащие коллекцию объектов UIElement
  • Классы, которые влияют на внешний вид UIElement
  • Классы, предоставляющие визуальный отзыв об элементе UIElement
  • Классы, предоставляющие пользователям возможность ввести текст
  • Классы, отображающие текст пользователя
  • Классы, форматирующие текст пользователя
  • Связанные разделы

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

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

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

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

Содержимое

ContentControl

Один произвольный объект.

HeaderedContentControl

Заголовок и один элемент, оба являющиеся произвольными объектами.

ItemsControl

Коллекция произвольных объектов.

HeaderedItemsControl

Заголовок и коллекция элементов, являющиеся произвольными объектами.

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

Button, GroupBox, Listbax, TreeViewItem

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

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

На следующем рисунке показаны четыре кнопки, свойство Content которых задано как "string" (строка), объект 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

TabControl

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

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

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

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

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

ListBox, содержащий несколько типов объектов

ListBox с четырьмя типами содержимого

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

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

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

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

Класс Panel размещает дочерние объекты UIElement. Его свойство содержимого – Children.

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

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

Классы, которые влияют на внешний вид UIElement

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

На следующем рисунке показан объект TextBox, окруженный границей Border.

TextBlock, имеющий границу

TextBox с черной границей

Классы, предоставляющие визуальный отзыв об элементе 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

Document

IDocumentPaginatorSource

FlowDocumentReader

Document

FlowDocument

FlowDocumentScrollViewer

Document

FlowDocument

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

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

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

См. также

Другие ресурсы

Основы WPF