Show / Hide Table of Contents

Общие сведения о модели содержимого TextElement

В этом обзоре модель содержимого описываются поддерживаемом содержимом для TextElement. Paragraph Класс — это разновидность TextElement. Модель содержимого описывает объекты/элементы, которые могут содержаться в других объектах. В этом обзоре представлена модель содержимого для объектов, производных от TextElement. Дополнительные сведения см. в разделе Общие сведения о документе нефиксированного.

Схема модели содержимого

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

Схема: Схема вместимости потока содержимого

Как видно из предыдущей диаграммы, потомки для элемента не обязательно определяются тем, класс, производный от Block класса или Inline класса. Например Span ( Inline-производный класс) может иметь только Inline дочерние элементы, но Figure (также Inline-производный класс) может иметь только Block дочерних элементов. Таким образом, схему можно использовать для быстрого определения элемента, который может содержаться в другом элементе. В качестве примера используем схему, чтобы определить, как создать содержимое нефиксированного RichTextBox.

  1. Объект RichTextBox должен содержать FlowDocument который в свою очередь, должен содержать Block-объект, производный от. Ниже приведен соответствующий сегмент из предыдущей диаграммы.

    Схема: Правила вместимости RichTextBox

    Разметка может выглядеть следующим образом.

    <RichTextBox>
      <FlowDocument>
        <!-- One or more Block-derived object… -->
      </FlowDocument>
    </RichTextBox>
    
  2. Согласно схеме, существует несколько 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>
    
  3. Опять же один или несколько Block требуются элементы TableCell. Для удобства поместим часть текста в ячейку. Это можно сделать с помощью Paragraph с Run элемент. Ниже приведен соответствующий сегмент из схемы, показывающий, что Paragraph может занять Inline элемент, который Run ( Inline элемент) может принять только обычный текст.

    Схема: Родительский/дочерний элементы для параграфа

    Схема: Родительский/дочерний элементы для запуска

Ниже приведен полный пример в виде разметки.

<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://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, блоки, и ListItems. Следующие примеры показывают, как управлять содержимым Span с помощью Inlines свойство.

Note

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

В следующем примере создается новый 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
  • Управление элементами потокового содержимого с помощью свойства Blocks
  • Управление FlowDocument с помощью свойства Blocks
  • Управление столбцами таблицы с помощью свойства Columns
  • Управление группами строк таблицы пользователя с помощью свойства RowGroups
Back to top Неофициальная документация по .NET на русском языке. Лицензия: CC-BY 4.0. Основано на документации по .NET с Microsoft Docs
Generated by DocFX