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
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.
RichTextBox musi zawierać FlowDocument, które z kolei musi zawierać obiekt pochodny od Block. Poniżej znajduje się odpowiedni segment z poprzedniego diagramu.
Diagram
Jak dotąd, tak może wyglądać znacznik.
<RichTextBox> <FlowDocument> <!-- One or more Block-derived object… --> </FlowDocument> </RichTextBox>
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
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>
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
Diagram
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:
InlineCollection: reprezentuje kolekcję elementów Inline. InlineCollection definiuje dozwoloną zawartość podrzędną elementów Paragraph, Spani TextBlock.
BlockCollection: reprezentuje kolekcję elementów Block. BlockCollection definiuje dozwoloną zawartość podrzędną elementów FlowDocument, Section, ListItem, TableCell, Floateri Figure.
ListItemCollection: element zawartości przepływu reprezentujący określony element zawartości w uporządkowanym lub nieuporządkowanym List.
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ż
- Manipulacja dokumentem Flow za pomocą właściwości Blocks
- Elementy przepływu zawartości manipulowane przez właściwość Blocks
- manipulowanie elementem FlowDocument za pomocą właściwości Blocks
- Manipulacja kolumnami tabeli za pomocą właściwości Columns
- manipulowanie grupami wierszy tabeli za pomocą właściwości RowGroups
.NET Desktop feedback