Udostępnij przez


Model zawartości TextElement — omówienie

Przegląd modelu zawartości opisuje obsługiwaną zawartość dla TextElement. Klasa Paragraph jest typem TextElement. Model zawartości opisuje, jakie obiekty/elementy mogą być zawarte w innych. To omówienie zawiera podsumowanie modelu zawartości używanego dla obiektów pochodzących z TextElement. Aby uzyskać więcej informacji, zobacz Omówienie dokumentu przepływu.

Diagram modelu zawartości

Na poniższym diagramie przedstawiono podsumowanie modelu zawartości dla klas uzyskanych z TextElement oraz sposób dopasowania innych klas niebędących TextElement do tego modelu.

diagram : schemat zawierający zawartość przepływu

Jak widać na powyższym diagramie, elementy podrzędne dozwolone dla elementu nie są koniecznie określane przez to, czy klasa jest dziedziczona z klasy Block, czy z klasy Inline. Na przykład Span (klasa pochodna Inline) może mieć tylko Inline elementów podrzędnych, ale Figure (również klasa pochodna Inline) może mieć tylko elementy podrzędne Block. W związku z tym diagram jest przydatny do szybkiego określania, który element może być zawarty w innym. Na przykład użyjemy diagramu, aby określić sposób konstruowania zawartości przepływu RichTextBox.

  1. RichTextBox musi zawierać FlowDocument, które z kolei musi zawierać obiekt pochodny od Block. Poniżej znajduje się odpowiedni segment z poprzedniego diagramu.

    Diagram : reguły zawierania RichTextBox

    Jak dotąd, tak może wyglądać znacznik.

    <RichTextBox>
      <FlowDocument>
        <!-- One or more Block-derived object… -->
      </FlowDocument>
    </RichTextBox>
    
  2. Zgodnie z diagramem istnieje kilka elementów Block do wyboru, w tym Paragraph, Section, Table, Listi BlockUIContainer (zobacz Klasy pochodne blokowe na powyższym diagramie). Załóżmy, że chcemy Table. Zgodnie z powyższym diagramem Table zawiera TableRowGroup, które zawiera elementy TableRow, w których znajdują się elementy TableCell, a te zawierają obiekt pochodny od Block. Poniżej znajduje się odpowiedni segment dla Table pobrany z powyższego diagramu.

    diagram : schemat nadrzędny/podrzędny dla tabeli

    Poniżej znajduje się odpowiedni znacznik.

    <RichTextBox>
      <FlowDocument>
        <Table>
          <TableRowGroup>
            <TableRow>
              <TableCell>
                <!-- One or more Block-derived object… -->
              </TableCell>
            </TableRow>
          </TableRowGroup>
        </Table>
      </FlowDocument>
    </RichTextBox>
    
  3. Ponownie wymagany jest co najmniej jeden element Block pod TableCell. Aby ułatwić sobie to, umieśćmy jakiś tekst w komórce. Możemy to zrobić przy użyciu Paragraph z elementem Run. Poniżej przedstawiono odpowiednie segmenty z diagramu pokazujące, że Paragraph może przyjąć element Inline i że Run (element Inline) może przyjmować tylko zwykły tekst.

    Diagram : Schemat nadrzędny/podrzędny akapitu

    Diagram : schemat nadrzędny/podrzędny dla uruchamiania

Poniżej przedstawiono cały przykład w adiustacji.

<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>

Programowa praca z zawartością TextElement

Zawartość TextElement jest składana przez kolekcje i tak programowe manipulowanie zawartością obiektów TextElement odbywa się przez pracę z tymi kolekcjami. Istnieją trzy różne kolekcje używane przez klasy TextElement -derived:

Można manipulować (dodawać lub usuwać elementy) z tych kolekcji przy użyciu odpowiednich właściwości inlines, Blocksi ListItems. W poniższych przykładach pokazano, jak manipulować zawartością obiektu Span przy użyciu właściwości Inlines.

Uwaga / Notatka

Tabela używa kilku kolekcji do manipulowania jego zawartością, ale nie są one omówione tutaj. Aby uzyskać więcej informacji, zobacz Table Overview.

Poniższy przykład tworzy nowy obiekt Span, a następnie używa metody Add do dodawania dwóch fragmentów tekstu jako elementów składowych zawartości 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..."));
Dim spanx As New Span()
spanx.Inlines.Add(New Run("A bit of text content..."))
spanx.Inlines.Add(New Run("A bit more text content..."))

Poniższy przykład tworzy nowy element Run i wstawia go na początku Span.

Run runx = new Run("Text to insert...");
spanx.Inlines.InsertBefore(spanx.Inlines.FirstInline, runx);
Dim runx As New Run("Text to insert...")
spanx.Inlines.InsertBefore(spanx.Inlines.FirstInline, runx)

Poniższy przykład usuwa ostatni element Inline w Span.

spanx.Inlines.Remove(spanx.Inlines.LastInline);
spanx.Inlines.Remove(spanx.Inlines.LastInline)

Poniższy przykład usuwa całą zawartość elementówInline z Span.

spanx.Inlines.Clear();
spanx.Inlines.Clear()

Typy współużytkujące ten model zawartości

Następujące typy dziedziczą z klasy TextElement i mogą służyć do wyświetlania zawartości opisanej w tym omówieniu.

Bold, Figure, , Floater, HyperlinkInlineUIContainerItalicLineBreakListListItemParagraphRunSectionSpanTable. Underline

Należy pamiętać, że ta lista zawiera tylko typy nieabstraktowe dystrybuowane za pomocą zestawu Windows SDK. Możesz użyć innych typów, które dziedziczą z TextElement.

Typy, które mogą zawierać obiekty TextElement

Zobacz model zawartości WPF.

Zobacz także