Cenni preliminari sul modello di contenuto TextElement
In questi cenni preliminari sul modello di contenuto viene descritto il contenuto supportato per un oggetto TextElement. La classe Paragraph è un tipo di TextElement. Un modello di contenuto consente di descrivere gli oggetti o gli elementi che possono essere contenuti in altri oggetti o elementi. In questi cenni preliminari viene riepilogato il modello di contenuto utilizzato per gli oggetti derivati da TextElement. Per ulteriori informazioni, vedere Cenni preliminari sui documenti dinamici.
Nel presente argomento sono contenute le seguenti sezioni.
- Diagramma del modello di contenuto
- Utilizzo del contenuto TextElement a livello di codice
- Tipi che condividono questo modello di contenuto
- Tipi in grado di contenere oggetti TextElement
- Argomenti correlati
Diagramma del modello di contenuto
Nel diagramma riportato di seguito viene riepilogato il modello di contenuto per le classi derivate da TextElement, nonché il modo per far rientrare altre classi non TextElement in tale modello.
Come è possibile osservare dal diagramma precedente, gli elementi figlio consentiti per un elemento non vengono necessariamente determinati in base alla derivazione di una classe dalla classe Block o da una classe Inline. Ad esempio, una classe Span (derivata da Inline) può includere solo elementi figlio Inline, mentre una classe Figure (derivata sempre da Inline) può includere solo elementi figlio Block. Pertanto, un diagramma è utile a determinare rapidamente quale elemento può essere contenuto in un altro elemento. Ad esempio, è possibile utilizzare il diagramma per determinare la modalità di costruzione del contenuto di flusso di un oggetto RichTextBox.
Un oggetto RichTextBox deve contenere un oggetto FlowDocument che a sua volta deve includere un oggetto derivato da Block. Di seguito viene riportato il corrispondente segmento del diagramma precedente.
Pertanto, l'aspetto del markup potrebbe essere quello visualizzato di seguito.
<RichTextBox> <FlowDocument> <!-- One or more Block-derived object… --> </FlowDocument> </RichTextBox>
In base al diagramma, è possibile scegliere tra diversi elementi Block, inclusi Paragraph, Section, Table, List e BlockUIContainer (vedere le classi derivate da Block nel diagramma precedente). Si supponga ad esempio di cercare un oggetto Table. In base al diagramma precedente, un oggetto Table contiene un oggetto TableRowGroup che include a sua volta elementi TableRow, che contengono elementi TableCell che includono infine un oggetto derivato da Block. Di seguito viene riportato il segmento corrispondente relativo a Table, tratto dal diagramma precedente.
Ecco il markup corrispondente.
<RichTextBox> <FlowDocument> <Table> <TableRowGroup> <TableRow> <TableCell> <!-- One or more Block-derived object… --> </TableCell> </TableRow> </TableRowGroup> </Table> </FlowDocument> </RichTextBox>
Anche in questo caso, uno o più elementi Block devono essere presenti in un oggetto TableCell. Per rendere più evidente l'esempio, viene inserito del testo nella cella. A tal fine, si utilizza un oggetto Paragraph con un elemento Run. Di seguito vengono riportati i segmenti corrispondenti del diagramma, che indicano che un oggetto Paragraph può accettare un elemento Inline e che un oggetto Run (un elemento Inline) può accettare solo il testo normale.
Di seguito viene mostrato l'intero esempio a livello di markup.
<Page xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="https://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>
Utilizzo del contenuto TextElement a livello di codice
Dal momento che il contenuto di un oggetto TextElement è costituito da insiemi, la modifica a livello di codice del contenuto dell'oggetto TextElement viene eseguita utilizzando tali insiemi. Esistono tre diversi insiemi utilizzati dalle classi derivate da TextElement:
InlineCollection: rappresenta un insieme di Inline elementi. InlineCollection definisce il contenuto figlio consentito degli elementi Paragraph, Span e TextBlock.
BlockCollection: rappresenta un insieme di Block elementi. BlockCollection definisce il contenuto figlio consentito degli elementi FlowDocument, Section, ListItem, TableCell, Floater e Figure.
ListItemCollection: elemento di contenuto del flusso che rappresenta un particolare elemento di contenuto in un oggetto List ordinato o non ordinato.
È possibile modificare ovvero aggiungere o rimuovere elementi da questi insiemi utilizzando le rispettive proprietà di Inlines, Blocks e ListItems. Negli esempi seguenti viene illustrata la modifica del contenuto di un oggetto Span tramite la proprietà Inlines.
Nota |
---|
Per modificare i contenuti di una tabella vengono utilizzati diversi insiemi, che tuttavia non vengono illustrati in questa sezione.Per ulteriori informazioni, vedere Cenni preliminari sull'elemento Table. |
Nell'esempio seguente viene creato un nuovo oggetto Span e viene quindi utilizzato il metodo Add per aggiungere due sequenze di testo come elementi di contenuto figlio di Span.
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..."))
Span spanx = 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 che viene inserito all'inizio dell'oggetto Span.
Dim runx As New Run("Text to insert...")
spanx.Inlines.InsertBefore(spanx.Inlines.FirstInline, runx)
Run runx = new Run("Text to insert...");
spanx.Inlines.InsertBefore(spanx.Inlines.FirstInline, runx);
Nell'esempio seguente viene eliminato l'ultimo elemento Inline dell'oggetto Span.
spanx.Inlines.Remove(spanx.Inlines.LastInline)
spanx.Inlines.Remove(spanx.Inlines.LastInline);
Nell'esempio seguente viene cancellato tutto il contenuto (elementi Inline) dall'oggetto Span.
spanx.Inlines.Clear()
spanx.Inlines.Clear();
Tipi che condividono questo modello di contenuto
I seguenti tipi ereditano dalla classe TextElement e possono essere utilizzati per visualizzare il contenuto descritto in questi cenni preliminari.
Bold, Figure, Floater, Hyperlink, InlineUIContainer, Italic, LineBreak, List, ListItem, Paragraph, Run, Section, Span, Table, Underline.
Notare che in questo elenco sono inclusi solo i tipi non astratti distribuiti con Windows SDK. È possibile utilizzare altri tipi che ereditano da TextElement.
Tipi in grado di contenere oggetti TextElement
Vedere Modello di contenuto WPF.
Vedere anche
Attività
Procedura: modificare un oggetto FlowDocument tramite la proprietà Blocks
Procedura: modificare elementi di contenuto del flusso tramite la proprietà Blocks
Procedura: modificare un oggetto FlowDocument tramite la proprietà Blocks
Procedura: modificare le colonne di una tabella tramite la proprietà Columns
Procedura: modificare i gruppi di righe di una tabella tramite la proprietà RowGroups