Cenni preliminari sul modello di contenuto TextElement

Questa panoramica di con modalità tenda l descrive il contenuto supportato per un oggetto TextElement. La Paragraph classe è un tipo di TextElement. Un modello di contenuto descrive gli oggetti o gli elementi che possono essere contenuti in altri oggetti o elementi. Questa panoramica riepiloga il con modalità tenda l usato per gli oggetti derivati da TextElement. Per altre informazioni, vedere Cenni preliminari sui documenti dinamici.

Diagramma del modello di contenuto

Il diagramma seguente riepiloga il con modalità tenda l per le classi derivate da TextElement e il modo in cui altre classi non TextElement rientrano in questo modello.

Diagram: Flow content containment schema

Come si può notare dal diagramma precedente, gli elementi figlio consentiti per un elemento non sono necessariamente determinati dal fatto che una classe sia derivata dalla classe o da Block una Inline classe. Ad esempio, un oggetto Span (una Inlineclasse derivata da - ) può avere Inline solo elementi figlio, ma una (anche una FigureInlineclasse derivata da ) può avere Block solo elementi figlio. Pertanto, un diagramma è utile per determinare rapidamente quale elemento può essere contenuto in un altro elemento. Ad esempio, si userà il diagramma per determinare come costruire il contenuto del flusso di un oggetto RichTextBox.

  1. Un RichTextBox oggetto deve contenere un oggetto FlowDocument che a sua volta deve contenere un Blockoggetto derivato da . Di seguito viene riportato il segmento corrispondente del diagramma precedente.

    Diagram: RichTextBox containment rules

    Fino a questo punto, l'aspetto del markup potrebbe essere simile al seguente.

    <RichTextBox>
      <FlowDocument>
        <!-- One or more Block-derived object… -->
      </FlowDocument>
    </RichTextBox>
    
  2. In base al diagramma, sono disponibili diversi Block elementi tra cui Paragraph, , SectionTable, Liste BlockUIContainer (vedere Classi derivate da blocchi nel diagramma precedente). Si supponga di volere un oggetto Table. In base al diagramma precedente, un Table oggetto contiene elementi TableRowGroup contenenti TableRow elementi che contengono TableCell un Blockoggetto derivato da . Di seguito è riportato il segmento corrispondente per Table tratto dal diagramma precedente.

    Diagram: Parent/child schema for 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ù Block elementi sono necessari sotto un oggetto TableCell. Per rendere più chiaro l'esempio, viene inserito del testo nella cella. A tale scopo, è possibile usare un Paragraph oggetto con un Run elemento . Di seguito sono riportati i segmenti corrispondenti del diagramma che mostra che un Paragraph oggetto può accettare un Inline elemento e che un oggetto (un RunInline elemento) può accettare solo testo normale.

    Diagram: Parent/child schema for Paragraph

    Diagram: Parent/Child schema for Run

Di seguito viene mostrato l'intero esempio a livello di 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>

Uso del contenuto TextElement a livello di codice

Il contenuto di un TextElement oggetto è costituito da raccolte e quindi la modifica a livello di codice del contenuto degli TextElement oggetti viene eseguita utilizzando queste raccolte. Esistono tre raccolte diverse usate dalle classi derivate da TextElement :

È possibile modificare ovvero aggiungere o rimuovere elementi da queste raccolte usando le rispettive proprietà di Inlines, Blocks e ListItems. Gli esempi seguenti illustrano come modificare il contenuto di un oggetto Span tramite la proprietà Inlines.

Nota

Per modificare il contenuto di una tabella vengono usate diverse raccolte, che tuttavia non vengono illustrate in questa sezione. Per altre informazioni, vedere Cenni preliminari sull'elemento Table.

Nell'esempio seguente viene creato un nuovo Span oggetto e quindi viene utilizzato il Add metodo per aggiungere due esecuzioni di testo come elementi figlio del contenuto di 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 Run elemento e lo inserisce all'inizio di 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 Inline elemento dell'oggetto Span.

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

Nell'esempio seguente vengono cancellati tutti i contenuti (Inline elementi) da Span.

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

Tipi che condividono questo modello di contenuto

I tipi seguenti ereditano dalla TextElement classe 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 non distratti distribuiti con Windows SDK. È possibile usare altri tipi che ereditano da TextElement.

Tipi in grado di contenere oggetti TextElement

Vedere Modello di contenuto WPF.

Vedi anche