Condividi tramite


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 : schema di contenimento del contenuto di flusso

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.

  1. 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 : Regole di contenimento RichTextBox

    Finora, ecco come il markup sembrerebbe.

    <RichTextBox>
      <FlowDocument>
        <!-- One or more Block-derived object… -->
      </FlowDocument>
    </RichTextBox>
    
  2. 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 : schema padre/figlio per la tabella

    Di seguito è riportato il markup corrispondente.

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

    Diagramma : schema padre/figlio per l'esecuzione di

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:

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

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