Общие сведения о модели содержимого TextElement
Обновлен: Ноябрь 2007
Данный раздел содержит основные сведения о поддерживаемом содержимом для модели TextElement. Класс Paragraph является типом TextElement. Модель содержимого описывает объекты/элементы, которые могут содержаться в других объектах. В разделе содержится обобщение модели содержимого для объектов, являющихся производными от TextElement. Дополнительные сведения см. в разделе Общие сведения о документе нефиксированного формата.
В этом разделе содержатся следующие подразделы.
- Диаграмма модели содержимого
- Работа с содержимым TextElement программными средствами
- Типы, совместно использующие модель содержимого
- Типы, которые могут содержать объекты TextElement
- Связанные разделы
Диаграмма модели содержимого
На следующей диаграмме представлена модель содержимого для классов, производных от TextElement, и других классов, отличных от TextElement, соответствующих этой модели.
Как видно из предыдущей диаграммы, дочерние элементы не обязательно определяются тем, является ли класс производным от класса Block или Inline. Например, класс Span (производный от Inline) может иметь только дочерние элементы Inline, но класс Figure (также производный от Inline) может иметь только дочерние элементы Block. Таким образом, диаграмма может служить для быстрого определения элемента, который может содержаться в другом элементе. Для примера используем диаграмму, чтобы определить, как создать содержимое нефиксированного формата RichTextBox.
Объект RichTextBox должен содержать FlowDocument, который в свою очередь должен содержать объект, производный от Block. Ниже приводится соответствующий сегмент из предыдущей диаграммы.
Разметка может выглядеть следующим образом:
<RichTextBox> <FlowDocument> <!-- One or more Block-derived object… --> </FlowDocument> </RichTextBox>
В соответствии с диаграммой существует несколько элементов класса Block для выбора, в том числе: Paragraph, Section, Table, List и BlockUIContainer (см. классы, производные от Block, в предыдущей диаграмме). Предположим, нам требуется Table. В соответствии с предыдущей диаграммой класс Table содержит TableRowGroup, содержащий элементы TableRow, которые содержат элементы TableCell, содержащие объект, производный от класса Block. Ниже приводится соответствующий сегмент для класса Table, взятый из предыдущей диаграммы.
Ниже приводится соответствующая разметка.
<RichTextBox> <FlowDocument> <Table> <TableRowGroup> <TableRow> <TableCell> <!-- One or more Block-derived object… --> </TableCell> </TableRow> </TableRowGroup> </Table> </FlowDocument> </RichTextBox>
Снова один или несколько элементов Block требуются для TableCell. Для удобства поместим часть текста в ячейку. Это можно сделать, используя Paragraph с элементом Run. Ниже приводится соответствующий сегмент из диаграммы, показывающий, что Paragraph может принять элемент Inline и что Run (элемент Inline) может принять только обычный текст.
Ниже приведен полный пример в виде разметки.
<Page xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml">
<RichTextBox>
<FlowDocument>
<!-- Normally a table would have multiple rows and multiple
cells but this code is for demonstration purposes.-->
<Table>
<TableRowGroup>
<TableRow>
<TableCell>
<Paragraph>
<!-- The schema does not actually require
explicit use of the Run tag in markup. It
is only included here for clarity. -->
<Run>Paragraph in a Table Cell.</Run>
</Paragraph>
</TableCell>
</TableRow>
</TableRowGroup>
</Table>
</FlowDocument>
</RichTextBox>
</Page>
Работа с содержимым TextElement программными средствами
Содержимое TextElement строится с помощью коллекций и поэтому программное управление содержимым объектов TextElement выполняется с использованием этих коллекций. Существуют три различные коллекции, используемые классами, производными от TextElement:
InlineCollection. Представляет коллекцию элементов Inline. InlineCollection определяет допустимое дочернее содержимое элементов Paragraph, Span и TextBlock;
BlockCollection. Представляет коллекцию элементов Block. BlockCollection определяет допустимое дочернее содержимое элементов FlowDocument, Section, ListItem, TableCell, Floater и Figure;
ListItemCollection. Элемент содержимого нефиксированного формата, представляющий конкретную единицу содержимого в виде упорядоченного или неупорядоченного списка List.
Существует возможность управления (добавления или удаления элементов) из этих коллекций с помощью соответствующих свойств Inlines, Blocks и ListItems. В следующих примерах показано, как управлять содержимым Span с помощью свойства Inlines.
Примечание. |
---|
В таблице используется несколько коллекций для управления содержимым, но они не рассматриваются в данном руководстве. Дополнительные сведения см. в разделе Общие сведения о таблицах. |
В следующем примере создается новый объект Span, а затем вызывается метод Add для добавления двух текстовых выполнений в качестве дочернего содержимого объекта Span.
Span spanx = new Span();
spanx.Inlines.Add(new Run("A bit of text content..."));
spanx.Inlines.Add(new Run("A bit more text content..."));
В следующем примере создается новый элемент Run, который вставляется в начало объекта Span.
Run runx = new Run("Text to insert...");
spanx.Inlines.InsertBefore(spanx.Inlines.FirstInline, runx);
В следующем примере удаляется последний элемент Inline в объекте Span.
spanx.Inlines.Remove(spanx.Inlines.LastInline);
В следующем примере удаляется все содержимое (элементы Inline) из объекта Span.
spanx.Inlines.Clear();
Типы, совместно использующие модель содержимого
Следующие типы наследуют от класса TextElement и могут быть использованы для отображения содержимого, описанного в этом обзоре.
Bold, Figure, Floater, Hyperlink, InlineUIContainer, Italic, LineBreak, List, ListItem, Paragraph, Run, Section, Span, Table, Underline.
Учтите, что этот список включает только неабстрактные типы, распространяемые с набором Windows SDK. Можно использовать другие типы, наследуемые от TextElement.
Типы, которые могут содержать объекты TextElement
См. раздел Модель содержимого WPF.
См. также
Задачи
Практическое руководство. Управление FlowDocument через свойство блоков
Практическое руководство. Управление элементами потокового содержимого через свойство Blocks
Практическое руководство. Управление FlowDocument через свойство блоков
Практическое руководство. Управление столбцами таблицы с помощью свойства столбцов