Condividi tramite


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.

Diagramma: schema di contenimento del contenuto del flusso

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.

  1. 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.

    Diagramma: regole di contenimento di RichTextBox

    Pertanto, l'aspetto del markup potrebbe essere quello visualizzato di seguito.

    <RichTextBox>
      <FlowDocument>
        <!-- One or more Block-derived object… -->
      </FlowDocument>
    </RichTextBox>
    
  2. 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.

    Diagramma: schema padre/figlio per Table

    Ecco il markup corrispondente.

    <RichTextBox>
      <FlowDocument>
        <Table>
          <TableRowGroup>
            <TableRow>
              <TableCell>
                <!-- One or more Block-derived object… -->
              </TableCell>
            </TableRow>
          </TableRowGroup>
        </Table>
      </FlowDocument>
    </RichTextBox>
    
  3. 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.

    Diagramma: schema padre/figlio per Paragraph

     

    Diagramma: schema padre/figlio per Run

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:

È 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.

NotaNota

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