TextElement İçerik Modeline Genel Bakış

Bu içerik modeline genel bakış, bir TextElementiçin desteklenen içeriği açıklar. Paragraph sınıfı bir TextElementtürüdür. İçerik modeli, diğerlerinde hangi nesnelerin/öğelerin içerilebileceğini açıklar. Bu genel bakış, TextElementtüretilen nesneler için kullanılan içerik modelini özetler. Daha fazla bilgi için bkz. Flow Belgesine Genel Bakış.

İçerik Modeli Diyagramı

Aşağıdaki diyagramda, TextElement türetilen sınıflar için içerik modeli ve diğer TextElement olmayan sınıfların bu modele nasıl uyum sağlandığı özetlenmiştir.

Diyagramı: Akış içeriği kapsama şeması

Önceki diyagramda görülebileceği üzere, bir öğe için izin verilen çocuklar, bir sınıfın Block sınıfından mı yoksa Inline sınıfından mı türetileceğiyle doğrudan belirlenmez. Örneğin, bir Span (Inlinetüretilmiş sınıf) yalnızca Inline alt öğeye sahip olabilir, ancak bir Figure (aynı zamanda Inlinetüretilmiş sınıf) yalnızca Block alt öğeleri olabilir. Bu nedenle diyagram, başka bir öğede hangi öğenin bulunabileceğini hızla belirlemek için kullanışlıdır. Örnek olarak, bir RichTextBoxakış içeriğinin nasıl oluşturacağınızı belirlemek için diyagramı kullanalım.

  1. RichTextBox, kendi içerisinde FlowDocumenttüretilmiş bir nesne içermesi gereken bir Block içermelidir. Yukarıdaki diyagramda karşılık gelen segment aşağıdadır.

    Diyagram: RichTextBox içerik kuralları

    Şu ana kadar, işaretleme bu şekilde görünebilir.

    <RichTextBox>
      <FlowDocument>
        <!-- One or more Block-derived object… -->
      </FlowDocument>
    </RichTextBox>
    
  2. Diyagrama göre, Block, Paragraph, Section, Tableve List dahil olmak üzere seçebileceğiniz birkaç BlockUIContainer öğesi vardır (önceki diyagramda blok türetilmiş sınıflar bölümüne bakın). Diyelim ki bir Tableistiyoruz. Önceki diyagrama göre, Table, TableRowGrouptüretilmiş bir nesne içeren TableRow öğelerini içeren TableCell öğelerini içeren bir Block'i içerir. Aşağıda, önceki diyagramdan alınan Table'a karşılık gelen kesit bulunmaktadır.

    Diyagramı: Tablo

    Aşağıda karşılık gelen işaretleme yer alır.

    <RichTextBox>
      <FlowDocument>
        <Table>
          <TableRowGroup>
            <TableRow>
              <TableCell>
                <!-- One or more Block-derived object… -->
              </TableCell>
            </TableRow>
          </TableRowGroup>
        </Table>
      </FlowDocument>
    </RichTextBox>
    
  3. Yine, bir Blockaltında bir veya daha fazla TableCell öğesi gerekir. Bunu basit hale getirmek için hücrenin içine biraz metin yerleştirelim. Şunu, Paragraph ile Run öğesi kullanarak yapabiliriz. Aşağıda diyagramdaki ilgili segmentler, ParagraphInline bir öğe alabildiğini ve Run (Inline öğesi) yalnızca düz metin alabildiğini gösterir.

    Diyagramı: Paragraf için ebeveyn/çocuk şeması

    Diyagramı: Run için Ebeveyn/Çocuk şeması

Aşağıda, işaretlemedeki tüm örnek verilmiştir.

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

Program Aracılığıyla TextElement İçeriğiyle Çalışma

bir TextElement içeriği koleksiyonlar tarafından oluşturulur ve bu nedenle TextElement nesnelerinin içeriğini program aracılığıyla düzenlemek bu koleksiyonlarla çalışılarak yapılır. TextElement -derived sınıfları tarafından kullanılan üç farklı koleksiyon vardır:

Satır içi, Bloklarve ListItemsözelliklerini kullanarak bu koleksiyonlardan öğeleri işleyebilir (öğe ekleyebilir veya kaldırabilirsiniz). Aşağıdaki örnekler, Satır içi özelliğini kullanarak Span içeriğinin nasıl düzenlenebileceğini gösterir.

Uyarı

Tablo, içeriğini işlemek için çeşitli koleksiyonlar kullanır, ancak bunlar burada ele alınmaz. Daha fazla bilgi için bkz. Tabloya Genel Bakış.

Aşağıdaki örnek yeni bir Span nesnesi oluşturur ve ardından Add'ye içerik olarak iki metin öğesi eklemek için Span yöntemini kullanır.

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..."))

Aşağıdaki örnek yeni bir Run öğesi oluşturur ve Spanbaşına ekler.

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)

Aşağıdaki örnek, Inlineiçindeki son Span öğesini siler.

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

Aşağıdaki örnek, Inlineiçindekilerin (Span öğeleri) tümünü temizler.

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

Bu içerik modelini paylaşan türler

Aşağıdaki türler TextElement sınıfından devralır ve bu genel bakışta açıklanan içeriği görüntülemek için kullanılabilir.

Bold, Figure, Floater, , Hyperlink, InlineUIContainer, Italic, LineBreak, , ListListItem, , Paragraph, RunSectionSpanTable, . Underline

Bu listenin yalnızca Windows SDK ile dağıtılan kısıt dışı türleri içerdiğini unutmayın. TextElement'den devralan diğer türleri kullanabilirsiniz.

TextElement Nesneleri İçerebilen Türler

Bkz. WPF İçerik Modeli.

Ayrıca bakınız