Przegląd Model zawartości TextElement

W tym omówieniu con tryb namiotu l opisano obsługiwaną zawartość dla elementu TextElement. Klasa Paragraph jest typem TextElementklasy . Con tryb namiotu l opisuje, jakie obiekty/elementy mogą być zawarte w innych. To omówienie zawiera podsumowanie con tryb namiotu l używanego dla obiektów pochodzących z TextElementelementu . Aby uzyskać więcej informacji, zobacz Flow Document Overview (Omówienie dokumentu przepływu).

Diagram modelu zawartości

Na poniższym diagramie przedstawiono podsumowanie wartości con tryb namiotu l dla klas pochodnych oraz TextElement sposobu dopasowania innych TextElement klas do tego modelu.

Diagram: Flow content containment schema

Jak widać na powyższym diagramie, elementy podrzędne dozwolone dla elementu nie muszą być określane przez to, czy klasa pochodzi z Block klasy, czy Inline klasy. Na przykład Span (klasa pochodna Inline) może zawierać tylko elementy podrzędne, ale Figure (również klasa pochodnaInline) może zawierać InlineBlock tylko elementy podrzędne. 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 obiektu RichTextBox.

  1. Element RichTextBox musi zawierać element FlowDocument , który z kolei musi zawierać Blockobiekt pochodny. Poniżej znajduje się odpowiedni segment z poprzedniego diagramu.

    Diagram: RichTextBox containment rules

    Do tej pory tak może wyglądać znaczniki.

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

    Diagram: Parent/child schema for Table

    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 co najmniej jeden Block element jest wymagany pod elementem TableCell. Aby ułatwić sobie to, umieśćmy jakiś tekst w komórce. Możemy to zrobić przy użyciu Paragraph elementu z elementem Run . Poniżej przedstawiono odpowiednie segmenty z diagramu pokazujące, że Paragraph element może przyjmować element i że Run (Inlineelement) może przyjmować Inline zwykły tekst.

    Diagram: Parent/child schema for Paragraph

    Diagram: Parent/Child schema for Run

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ść obiektu TextElement składa się z kolekcji, a więc programowe manipulowanie zawartością TextElement obiektów odbywa się przez pracę z tymi kolekcjami. Istnieją trzy różne kolekcje używane przez TextElement klasy pochodne:

Można manipulować (dodawać lub usuwać elementy) z tych kolekcji przy użyciu odpowiednich właściwości linii, bloków i listItems. W poniższych przykładach pokazano, jak manipulować zawartością funkcji Span przy użyciu właściwości Inlines .

Uwaga

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

Poniższy przykład tworzy nowy Span obiekt, a następnie używa Add metody , aby dodać dwa uruchomienia tekstu jako elementy podrzędne zawartości obiektu 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 Run element i wstawia go na początku elementu 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 Inline element w pliku Span.

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

Poniższy przykład czyści całą zawartość (Inline elementy) z elementu Span.

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

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

Następujące typy dziedziczą z TextElement klasy 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 dziedzicujących z programu TextElement.

Typy, które mogą zawierać obiekty TextElement

Zobacz Model zawartości WPF.

Zobacz też