Panoramica del modello di contenuto TextElement
Questa panoramica dello schema di contenuto descrive il contenuto supportato per un TextElement. La classe Paragraph è un tipo di TextElement. Un modello di contenuto descrive gli oggetti o gli elementi che possono essere contenuti in altri. Questa panoramica riepiloga il modello di contenuto usato per gli oggetti derivati da TextElement. Per altre informazioni, vedere Flow Document Overview.
Diagramma del modello di contenuto
Il diagramma seguente riepiloga il modello di contenuto per le classi derivate da TextElement e il modo in cui altre classi non TextElement
rientrano in questo modello.
Diagramma
Come si può notare dal diagramma precedente, i figli consentiti per un elemento non sono necessariamente determinati dal fatto che una classe sia derivata dalla classe Block o da una classe Inline. Ad esempio, un Span (una classe derivata da Inline) può avere solo elementi figlio Inline, ma una Figure (anche una classe derivata da Inline) può avere solo elementi figlio Block. Pertanto, un diagramma è utile per determinare rapidamente quale elemento può essere contenuto in un altro. Ad esempio, si userà il diagramma per determinare come costruire il contenuto del flusso di un RichTextBox.
Un RichTextBox deve contenere un FlowDocument che a sua volta deve contenere un oggetto derivato da Block. Di seguito è riportato il segmento corrispondente del diagramma precedente.
Diagramma
Finora, ecco come il markup sembrerebbe.
<RichTextBox> <FlowDocument> <!-- One or more Block-derived object… --> </FlowDocument> </RichTextBox>
In base al diagramma sono disponibili diversi elementi Block tra cui Paragraph, Section, Table, Liste BlockUIContainer (vedere Classi derivate da blocchi nel diagramma precedente). Supponiamo di voler un Table. Secondo il diagramma precedente, un Table contiene un TableRowGroup, che contiene elementi TableRow, i quali contengono elementi TableCell che a loro volta contengono un oggetto derivato da Block. Di seguito è riportato il segmento corrispondente per Table tratto dal diagramma precedente.
Diagramma
Di seguito è riportato il markup corrispondente.
<RichTextBox> <FlowDocument> <Table> <TableRowGroup> <TableRow> <TableCell> <!-- One or more Block-derived object… --> </TableCell> </TableRow> </TableRowGroup> </Table> </FlowDocument> </RichTextBox>
Ancora, uno o più elementi Block sono necessari sotto un TableCell. Per semplificare, inserire del testo all'interno della cella. A tale scopo, è possibile usare un Paragraph con un elemento Run. Di seguito sono riportati i segmenti corrispondenti del diagramma che mostra che un Paragraph può accettare un elemento Inline e che un Run (un elemento Inline) può accettare solo testo normale.
Diagramma
Diagramma
Di seguito è riportato l'intero esempio nel markup.
<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>
Lavorare con il contenuto di TextElement programmaticamente
Il contenuto di un TextElement è costituito da raccolte e quindi la modifica a livello di codice del contenuto degli oggetti TextElement viene eseguita utilizzando queste raccolte. Esistono tre raccolte diverse usate dalle classi TextElement -derived:
InlineCollection: rappresenta una raccolta di elementi Inline. InlineCollection definisce il contenuto consentito per i figli degli elementi Paragraph, Spane TextBlock.
BlockCollection: rappresenta una raccolta di elementi Block. BlockCollection definisce il contenuto figlio consentito degli elementi FlowDocument, Section, ListItem, TableCell, Floatere Figure .
ListItemCollection: elemento di contenuto del flusso che rappresenta un elemento di contenuto specifico in un oggetto ordinato o non ordinato List.
È possibile modificare (aggiungere o rimuovere elementi) da queste raccolte usando le rispettive proprietà di Inlines, Blocchie ListItems. Negli esempi seguenti viene illustrato come modificare il contenuto di un oggetto Span usando la proprietà
Nota
La tabella usa diverse raccolte per modificarne il contenuto, ma non sono descritte qui. Per altre informazioni, vedere Panoramica della tabella .
Nell'esempio seguente viene creato un nuovo oggetto Span e quindi viene utilizzato il metodo Add
per aggiungere due segmenti di testo come figli del contenuto del 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..."))
Nell'esempio seguente viene creato un nuovo elemento Run e inserito all'inizio del 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)
Nell'esempio seguente viene eliminato l'ultimo elemento Inline nel Span.
spanx.Inlines.Remove(spanx.Inlines.LastInline);
spanx.Inlines.Remove(spanx.Inlines.LastInline)
Nell'esempio seguente, vengono eliminati tutti i contenuti (Inline elementi) dal Span.
spanx.Inlines.Clear();
spanx.Inlines.Clear()
Tipi che condividono questo modello di contenuto
I tipi seguenti ereditano dalla classe TextElement e possono essere usati per visualizzare il contenuto descritto in questa panoramica.
Bold, Figure, Floater, Hyperlink, InlineUIContainer, Italic, LineBreak, List, ListItem, Paragraph, Run, Section, Span, Table, Underline.
Si noti che questo elenco include solo tipi non astratti distribuiti con il Windows SDK. È possibile usare altri tipi che ereditano da TextElement.
Tipi che possono contenere oggetti TextElement
Consulta il modello di contenuto WPF .
Vedere anche
- Modificare un FlowDocument tramite la proprietà Blocks
- Modificare gli elementi del contenuto del flusso tramite la proprietà Blocks
- modificare un oggetto FlowDocument tramite la proprietà Blocks
- modificare le colonne di una tabella tramite la proprietà Columns
- modificare i gruppi di righe di una tabella tramite la proprietà RowGroups
.NET Desktop feedback