Udostępnij za pośrednictwem


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.

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 czyści całą zawartość (Inline elementów) 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, Hyperlink, InlineUIContainer, Italic, LineBreak, List, ListItem, Paragraph, Run, Section, Span, Table, 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 też