Akış Belgesine Genel Bakış

Flow belgeleri görüntülemeyi ve okunabilirliği iyileştirmek için tasarlanmıştır. Akış belgeleri, önceden tanımlanmış tek bir düzen yerine içeriklerini pencere boyutu, cihaz çözümlemesi ve isteğe bağlı kullanıcı tercihleri gibi çalışma zamanı değişkenlerine göre dinamik olarak ayarlar ve yeniden akışla düzenler. Buna ek olarak, akış belgeleri sayfalama ve sütunlar gibi gelişmiş belge özellikleri sunar. Bu konu başlığında akış belgelerine genel bir bakış ve nasıl oluşturulacakları açıklanmıştır.

Belge Flow nedir?

Akış belgesi pencere boyutuna, cihaz çözünürlüğüne ve diğer ortam değişkenlerine bağlı olarak "içeriği yeniden akışla akışı" yapmak için tasarlanmıştır. Buna ek olarak, akış belgelerinde arama, okunabilirliği iyi hale getirmek için görüntüleme modları ve yazı tiplerinin boyutunu ve görünümünü değiştirme gibi çeşitli yerleşik özellikler vardır. Flow okuma kolaylığı birincil belge tüketimi senaryosu olduğunda belgeler en iyi şekilde kullanılır. Buna karşılık, Sabit Belgeler statik bir sunuma sahip olacak şekilde tasarlanmıştır. Kaynak içeriğin uygun olması gerekli olduğunda Belgeler yararlı olduğunda düzeltildi. Farklı belge türleri hakkında daha fazla bilgi için bkz. WPF'de Belgeler.

Aşağıdaki çizimde, farklı boyutlardaki çeşitli pencerelerde görüntülenmiş bir örnek akış belgesi gösterilmiştir. Görüntüleme alanı değişti olarak, kullanılabilir alanı en iyi şekilde kullanmak için içerik yeniden akışları.

Flow Document Content Reflow

Yukarıdaki görüntüde de belirtildiği gibi akış içeriği paragraflar, listeler, görüntüler ve daha fazlası dahil olmak üzere birçok bileşen içerebilir. Bu bileşenler, işaretlemedeki öğelere ve yordam kodundaki nesnelere karşılık gelen bileşenlerdir. Bu sınıfları daha sonra bu genel bakışın İlgili Sınıflar Flow ayrıntılı bir şekilde inceleeceğiz. Şimdilik, kalın metin ve liste ile paragraflardan oluşan bir akış belgesi oluşturan basit bir kod örneği ve burada ve ardından yer velenmiştir.

<!-- This simple flow document includes a paragraph with some
     bold text in it and a list. -->
<FlowDocumentReader xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
  <FlowDocument>
    <Paragraph>
      <Bold>Some bold text in the paragraph.</Bold>
      Some text that is not bold.
    </Paragraph>

    <List>
      <ListItem>
        <Paragraph>ListItem 1</Paragraph>
      </ListItem>
      <ListItem>
        <Paragraph>ListItem 2</Paragraph>
      </ListItem>
      <ListItem>
        <Paragraph>ListItem 3</Paragraph>
      </ListItem>
    </List>

  </FlowDocument>
</FlowDocumentReader>
using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;

namespace SDKSample
{
    public partial class SimpleFlowExample : Page
    {
        public SimpleFlowExample()
        {

            Paragraph myParagraph = new Paragraph();

            // Add some Bold text to the paragraph
            myParagraph.Inlines.Add(new Bold(new Run("Some bold text in the paragraph.")));

            // Add some plain text to the paragraph
            myParagraph.Inlines.Add(new Run(" Some text that is not bold."));

            // Create a List and populate with three list items.
            List myList = new List();

            // First create paragraphs to go into the list item.
            Paragraph paragraphListItem1 = new Paragraph(new Run("ListItem 1"));
            Paragraph paragraphListItem2 = new Paragraph(new Run("ListItem 2"));
            Paragraph paragraphListItem3 = new Paragraph(new Run("ListItem 3"));

            // Add ListItems with paragraphs in them.
            myList.ListItems.Add(new ListItem(paragraphListItem1));
            myList.ListItems.Add(new ListItem(paragraphListItem2));
            myList.ListItems.Add(new ListItem(paragraphListItem3));

            // Create a FlowDocument with the paragraph and list.
            FlowDocument myFlowDocument = new FlowDocument();
            myFlowDocument.Blocks.Add(myParagraph);
            myFlowDocument.Blocks.Add(myList);

            // Add the FlowDocument to a FlowDocumentReader Control
            FlowDocumentReader myFlowDocumentReader = new FlowDocumentReader();
            myFlowDocumentReader.Document = myFlowDocument;

            this.Content = myFlowDocumentReader;
        }
    }
}

Imports System.Windows
Imports System.Windows.Controls
Imports System.Windows.Documents

Namespace SDKSample
    Partial Public Class SimpleFlowExample
        Inherits Page
        Public Sub New()

            Dim myParagraph As New Paragraph()

            ' Add some Bold text to the paragraph
            myParagraph.Inlines.Add(New Bold(New Run("Some bold text in the paragraph.")))

            ' Add some plain text to the paragraph
            myParagraph.Inlines.Add(New Run(" Some text that is not bold."))

            ' Create a List and populate with three list items.
            Dim myList As New List()

            ' First create paragraphs to go into the list item.
            Dim paragraphListItem1 As New Paragraph(New Run("ListItem 1"))
            Dim paragraphListItem2 As New Paragraph(New Run("ListItem 2"))
            Dim paragraphListItem3 As New Paragraph(New Run("ListItem 3"))

            ' Add ListItems with paragraphs in them.
            myList.ListItems.Add(New ListItem(paragraphListItem1))
            myList.ListItems.Add(New ListItem(paragraphListItem2))
            myList.ListItems.Add(New ListItem(paragraphListItem3))

            ' Create a FlowDocument with the paragraph and list.
            Dim myFlowDocument As New FlowDocument()
            myFlowDocument.Blocks.Add(myParagraph)
            myFlowDocument.Blocks.Add(myList)

            ' Add the FlowDocument to a FlowDocumentReader Control
            Dim myFlowDocumentReader As New FlowDocumentReader()
            myFlowDocumentReader.Document = myFlowDocument

            Me.Content = myFlowDocumentReader
        End Sub
    End Class
End Namespace

Aşağıdaki çizimde bu kod parçacığının nasıl olduğu gösterilmiştir.

Screenshot: Rendered FlowDocument example

Bu örnekte FlowDocumentReader denetim, akış içeriğini barındırmak için kullanılır. Akış Flow barındırma denetimleri hakkında daha fazla bilgi için bkz. Belge Türleri. Paragraph, ListListItem , ve Bold öğeleri, işaretleme sırasına göre içerik biçimlendirmesini kontrol etmek için kullanılır. Örneğin, öğesi paragrafta metnin yalnızca bir parçasına yayma; sonuç olarak metnin yalnızca bu bölümü Bold kalın olur. HTML kullandıysanız bu size tanıdık gelecektir.

Yukarıdaki çizimde vurgulanmış şekilde, Belgelerde yerleşik olarak Flow vardır:

  • Arama: Kullanıcının belgenin tamamına tam metin araması gerçekleştirmesini sağlar.

  • Görüntüleme Modu: Kullanıcı tek sayfalı (tek sayfalı) görüntüleme modu, aynı anda iki sayfalı (kitap okuma biçimi) görüntüleme modu ve sürekli kaydırma (altsız) görüntüleme modu dahil olmak üzere tercih ettiği görüntüleme modunu seçebilirsiniz. Bu görüntüleme modları hakkında daha fazla bilgi için bkz. FlowDocumentReaderViewingMode .

  • Sayfa GezintiSi Denetimleri: Belgenin görüntüleme modu sayfaları kullanıyorsa, sayfa gezintisi denetimleri bir sonraki sayfaya (aşağı ok) veya önceki sayfaya (yukarı ok) atlamak için bir düğmenin yanı sıra geçerli sayfa numarası ve toplam sayfa sayısı göstergelerini içerir. Sayfalar arasında çevirme, klavye ok tuşları kullanılarak da gerçek olabilir.

  • Yakınlaştırma: Yakınlaştırma denetimleri kullanıcının sırasıyla artı veya eksi düğmelerine tıklayarak yakınlaştırma düzeyini artırmalarına veya azaltmalarına olanak sağlar. Yakınlaştırma denetimleri ayrıca yakınlaştırma düzeyini ayarlamak için bir kaydırıcı içerir. Daha fazla bilgi için bkz. Zoom.

Bu özellikler akış içeriğini barındırmak için kullanılan denetime göre değiştirilebilir. Sonraki bölümde, farklı denetimler açık bir şekilde anlattır.

Flow Türleri

Akış belgesi içeriğinin görüntüsü ve nasıl göründüğü, akış içeriğini barındırmak için kullanılan nesneye bağlıdır. Akış içeriğini görüntülemeyi destekleyen dört denetim vardır: FlowDocumentReader , FlowDocumentPageViewer , ve RichTextBoxFlowDocumentScrollViewer . Bu denetimler aşağıda kısaca açıklanmıştır.

Not

FlowDocument akış içeriğini doğrudan barındırmak için gereklidir, bu nedenle bu görüntüleme denetimlerinin hepsi akış içeriği FlowDocument barındırmayı etkinleştirmek için bir tüketir.

FlowDocumentReader

FlowDocumentReader , kullanıcının tek sayfalı (tek sayfalı) görüntüleme modu, aynı anda iki sayfalı (kitap okuma biçimi) görüntüleme modu ve sürekli kaydırma (altsız) görüntüleme modu gibi çeşitli görüntüleme modları arasında dinamik olarak seçime olanak sağlayan özellikler içerir. Bu görüntüleme modları hakkında daha fazla bilgi için bkz. FlowDocumentReaderViewingMode . Farklı görüntüleme modları arasında dinamik olarak geçiş yapma ve belirli bir görüntüleme modunda düzeltilen daha hafif akış içerik görüntüleyicileri sağlama FlowDocumentPageViewerFlowDocumentScrollViewer olanağına ihtiyacınız yoksa.

FlowDocumentPageViewer ve FlowDocumentScrollViewer

FlowDocumentPageViewer içeriği tek tek sayfa görüntüleme modunda, içeriği FlowDocumentScrollViewer ise sürekli kaydırma modunda gösterir. FlowDocumentPageViewerVe'nin her ikisi de belirli bir görüntüleme moduna FlowDocumentScrollViewer sabittir. ile karşılaştırıldığında, kullanıcının veya 'den daha fazla kaynak kullanımlı olma maliyetiyle çeşitli görüntüleme modları (numaralama tarafından sağlandığında) arasında dinamik olarak seçime olanak sağlayan FlowDocumentReaderFlowDocumentReaderViewingMode özellikler FlowDocumentPageViewerFlowDocumentScrollViewer içerir.

Varsayılan olarak dikey kaydırma çubuğu her zaman gösterilir ve gerekirse yatay kaydırma çubuğu görünür duruma gelir. için varsayılan kullanıcı FlowDocumentScrollViewer arabirimi bir araç çubuğu içermez; ancak özelliği, yerleşik araç çubuğunu etkinleştirmek için IsToolBarVisible kullanılabilir.

RichTextBox

Kullanıcının akış RichTextBox içeriğini düzenlemesine izin vermek istediğiniz bir kullanın. Örneğin, bir kullanıcının tablolar, italik ve kalın biçimlendirme gibi şeyleri işlemesine izin vermek için bir düzenleyici oluşturmak RichTextBox istediyebilirsiniz. Daha fazla bilgi için bkz. RichTextBox'a Genel Bakış.

Not

Flow RichTextBox içeriği, diğer denetimlerde yer alan akış içeriği gibi davranmaz. Örneğin, içinde sütun yoktur ve RichTextBox bu nedenle otomatik yeniden boyutlandırma davranışı yoktur. Ayrıca genellikle arama, görüntüleme modu, sayfa gezintisi ve yakınlaştırma gibi akış içeriğinin yerleşik özellikleri bir içinde RichTextBox kullanılamaz.

İçerik Flow Oluşturma

Flow, metinler, görüntüler, tablolar ve denetimler gibi türetilmiş sınıflar gibi çeşitli öğelerden oluşan karmaşık UIElement olabilir. Karmaşık akış içeriğinin nasıl oluşturulacaklarını anlamak için aşağıdaki noktalar kritik öneme sahip:

  • Flow İlgili Sınıflar:Akış içeriğinde kullanılan her sınıfın belirli bir amacı vardır. Ayrıca, akış sınıfları arasındaki hiyerarşik ilişki bunların nasıl kullanıldıklarını anlamanıza yardımcı olur. Örneğin, sınıfından türetilen sınıflar, görüntülenen nesneleri içerirken diğer Block nesneleri Inline içermek için kullanılır.

  • İçerik Şeması:Akış belgesi için çok sayıda iç içe öğe gerekli olabilir. İçerik şeması, öğeler arasındaki olası üst/alt ilişkileri belirtir.

Aşağıdaki bölümlerde bu alanların her biri daha ayrıntılı olarak incelemektedir.

Aşağıdaki diyagramda genellikle akış içeriğiyle kullanılan nesneler gösterilmiştir:

Diagram: Flow content element class hierarchy

Akış içeriğinin amaçları doğrultusunda iki önemli kategori vardır:

  1. Blok türetilmiş sınıflar:"İçerik öğelerini engelle" veya yalnızca "Öğeleri Engelle" olarak da adlandırılan. öğesinden devralınan öğeler, ortak bir üst öğe altındaki öğeleri grup etmek veya Block bir gruba ortak öznitelikler uygulamak için kullanılabilir.

  2. Satır içi türetilmiş sınıflar:"Satır içi içerik öğeleri" veya yalnızca "Satır Içi Öğeler" olarak da adlandırılan. öğesinden Inline devralınan öğeler bir Blok Öğesi veya başka bir Satır Içi Öğe içinde yer alan öğelerdir. Satır Içi Öğeler genellikle ekrana işlenen doğrudan içerik kapsayıcısı olarak kullanılır. Örneğin, Paragraph bir (Blok Öğesi) bir (Satır Içi Öğesi) içerebilir, ancak aslında ekranda Run işlenen metni Run içerir.

Bu iki kategorinin her sınıfı aşağıda kısaca açıklanmıştır.

Blok türetilmiş Sınıflar

Paragraf

Paragraph genellikle içeriği bir paragrafta grup etmek için kullanılır. Paragraf'ın en basit ve en yaygın kullanımı, bir metin paragrafı oluşturmaktır.

<FlowDocument xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
  <Paragraph>
    Some paragraph text.
  </Paragraph>
</FlowDocument>
using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;

namespace SDKSample
{
    public partial class ParagraphExample : Page
    {
        public ParagraphExample()
        {

            // Create paragraph with some text.
            Paragraph myParagraph = new Paragraph();
            myParagraph.Inlines.Add(new Run("Some paragraph text."));

            // Create a FlowDocument and add the paragraph to it.
            FlowDocument myFlowDocument = new FlowDocument();
            myFlowDocument.Blocks.Add(myParagraph);

            this.Content = myFlowDocument;
        }
    }
}

Imports System.Windows
Imports System.Windows.Controls
Imports System.Windows.Documents

Namespace SDKSample
    Partial Public Class ParagraphExample
        Inherits Page
        Public Sub New()

            ' Create paragraph with some text.
            Dim myParagraph As New Paragraph()
            myParagraph.Inlines.Add(New Run("Some paragraph text."))

            ' Create a FlowDocument and add the paragraph to it.
            Dim myFlowDocument As New FlowDocument()
            myFlowDocument.Blocks.Add(myParagraph)

            Me.Content = myFlowDocument
        End Sub
    End Class
End Namespace

Ancak, aşağıda göreceği gibi satır içi türetilmiş diğer öğeleri de içerebilirsiniz.

Section

Section yalnızca diğer türetilmiş öğeleri Block içermek için kullanılır. Içerdiği öğelere varsayılan biçimlendirme uygulamaz. Ancak, üzerinde ayarlanmış tüm özellik değerleri Section alt öğeleri için geçerlidir. Bölüm ayrıca alt koleksiyonunda program aracılığıyla yineleyebilirsiniz. Section , HTML'de DIV etiketine <> benzer şekilde kullanılır.

Aşağıdaki örnekte, bir altında üç paragraf Section tanımlanmıştır. bölümü Kırmızı özellik Background değerine sahip olduğu için paragrafların arka plan rengi de kırmızıdır.

<FlowDocument xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
  <!-- By default, Section applies no formatting to elements contained
       within it. However, in this example, the section has a Background
       property value of "Red", therefore, the three paragraphs (the block)  
       inside the section also have a red background. -->
  <Section Background="Red">
    <Paragraph>
      Paragraph 1
    </Paragraph>
    <Paragraph>
      Paragraph 2
    </Paragraph>
    <Paragraph>
      Paragraph 3
    </Paragraph>
  </Section>
</FlowDocument>
using System;
using System.Windows;
using System.Windows.Media;
using System.Windows.Controls;
using System.Windows.Documents;

namespace SDKSample
{
    public partial class SectionExample : Page
    {
        public SectionExample()
        {

            // Create three paragraphs
            Paragraph myParagraph1 = new Paragraph(new Run("Paragraph 1"));
            Paragraph myParagraph2 = new Paragraph(new Run("Paragraph 2"));
            Paragraph myParagraph3 = new Paragraph(new Run("Paragraph 3"));

            // Create a Section and add the three paragraphs to it.
            Section mySection = new Section();
            mySection.Background = Brushes.Red;

            mySection.Blocks.Add(myParagraph1);
            mySection.Blocks.Add(myParagraph2);
            mySection.Blocks.Add(myParagraph3);

            // Create a FlowDocument and add the section to it.
            FlowDocument myFlowDocument = new FlowDocument();
            myFlowDocument.Blocks.Add(mySection);

            this.Content = myFlowDocument;
        }
    }
}

Imports System.Windows
Imports System.Windows.Media
Imports System.Windows.Controls
Imports System.Windows.Documents

Namespace SDKSample
    Partial Public Class SectionExample
        Inherits Page
        Public Sub New()

            ' Create three paragraphs
            Dim myParagraph1 As New Paragraph(New Run("Paragraph 1"))
            Dim myParagraph2 As New Paragraph(New Run("Paragraph 2"))
            Dim myParagraph3 As New Paragraph(New Run("Paragraph 3"))

            ' Create a Section and add the three paragraphs to it.
            Dim mySection As New Section()
            mySection.Background = Brushes.Red

            mySection.Blocks.Add(myParagraph1)
            mySection.Blocks.Add(myParagraph2)
            mySection.Blocks.Add(myParagraph3)

            ' Create a FlowDocument and add the section to it.
            Dim myFlowDocument As New FlowDocument()
            myFlowDocument.Blocks.Add(mySection)

            Me.Content = myFlowDocument
        End Sub
    End Class
End Namespace

Blockuıcontainer

BlockUIContainer öğelerin UIElement (yani bir ) blok Button türetilen akış içeriğine katıştırılmaya olanak sağlar. InlineUIContainer (aşağıya bakın) öğeleri satır içi UIElement türetilmiş akış içeriğine eklemek için kullanılır. BlockUIContainer ve bu iki öğeden biri içinde yer olmadığı sürece akış içeriğinde kullanmanın başka InlineUIContainer bir yolu olmadığı için UIElement önemlidir.

Aşağıdaki örnek, akış içeriği içindeki nesneleri BlockUIContainer barındırmak için UIElement öğesinin nasıl kullanılageldi?

<FlowDocument ColumnWidth="400">
  <Section Background="GhostWhite">
    <Paragraph>
      A UIElement element may be embedded directly in flow content
      by enclosing it in a BlockUIContainer element.
    </Paragraph>
    <BlockUIContainer>
      <Button>Click me!</Button>
    </BlockUIContainer>
    <Paragraph>
      The BlockUIContainer element may host no more than one top-level
      UIElement.  However, other UIElements may be nested within the
      UIElement contained by an BlockUIContainer element.  For example,
      a StackPanel can be used to host multiple UIElement elements within
      a BlockUIContainer element.
    </Paragraph>
    <BlockUIContainer>
      <StackPanel>
        <Label Foreground="Blue">Choose a value:</Label>
        <ComboBox>
          <ComboBoxItem IsSelected="True">a</ComboBoxItem>
          <ComboBoxItem>b</ComboBoxItem>
          <ComboBoxItem>c</ComboBoxItem>
        </ComboBox>
        <Label Foreground ="Red">Choose a value:</Label>
        <StackPanel>
          <RadioButton>x</RadioButton>
          <RadioButton>y</RadioButton>
          <RadioButton>z</RadioButton>
        </StackPanel>
        <Label>Enter a value:</Label>
        <TextBox>
          A text editor embedded in flow content.
        </TextBox>
      </StackPanel>
    </BlockUIContainer>
  </Section>
</FlowDocument>

Aşağıdaki şekilde bu örneğin nasıl işlen olduğu gösterir:

Screenshot that shows a UIElement embedded in flow content.

Liste

List Madde işaretli veya sayısal bir liste oluşturmak için kullanılır. MarkerStyleTextMarkerStyle Listenin stilini belirleyebilmek için özelliği bir numaralandırma değeri olarak ayarlayın. Aşağıdaki örnekte nasıl basit bir liste oluşturulacağı gösterilmektedir.

<FlowDocument xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
  <List>
    <ListItem>
      <Paragraph>
        List Item 1
      </Paragraph>
    </ListItem>
    <ListItem>
      <Paragraph>
        List Item 2
      </Paragraph>
    </ListItem>
    <ListItem>
      <Paragraph>
        List Item 3
      </Paragraph>
    </ListItem>
  </List>
</FlowDocument>
using System;
using System.Windows;
using System.Windows.Media;
using System.Windows.Controls;
using System.Windows.Documents;

namespace SDKSample
{
    public partial class ListExample : Page
    {
        public ListExample()
        {

            // Create three paragraphs
            Paragraph myParagraph1 = new Paragraph(new Run("List Item 1"));
            Paragraph myParagraph2 = new Paragraph(new Run("List Item 2"));
            Paragraph myParagraph3 = new Paragraph(new Run("List Item 3"));

            // Create the ListItem elements for the List and add the
            // paragraphs to them.
            ListItem myListItem1 = new ListItem();
            myListItem1.Blocks.Add(myParagraph1);
            ListItem myListItem2 = new ListItem();
            myListItem2.Blocks.Add(myParagraph2);
            ListItem myListItem3 = new ListItem();
            myListItem3.Blocks.Add(myParagraph3);

            // Create a List and add the three ListItems to it.
            List myList = new List();

            myList.ListItems.Add(myListItem1);
            myList.ListItems.Add(myListItem2);
            myList.ListItems.Add(myListItem3);

            // Create a FlowDocument and add the section to it.
            FlowDocument myFlowDocument = new FlowDocument();
            myFlowDocument.Blocks.Add(myList);

            this.Content = myFlowDocument;
        }
    }
}

Imports System.Windows
Imports System.Windows.Media
Imports System.Windows.Controls
Imports System.Windows.Documents

Namespace SDKSample
    Partial Public Class ListExample
        Inherits Page
        Public Sub New()

            ' Create three paragraphs
            Dim myParagraph1 As New Paragraph(New Run("List Item 1"))
            Dim myParagraph2 As New Paragraph(New Run("List Item 2"))
            Dim myParagraph3 As New Paragraph(New Run("List Item 3"))

            ' Create the ListItem elements for the List and add the 
            ' paragraphs to them.
            Dim myListItem1 As New ListItem()
            myListItem1.Blocks.Add(myParagraph1)
            Dim myListItem2 As New ListItem()
            myListItem2.Blocks.Add(myParagraph2)
            Dim myListItem3 As New ListItem()
            myListItem3.Blocks.Add(myParagraph3)

            ' Create a List and add the three ListItems to it.
            Dim myList As New List()

            myList.ListItems.Add(myListItem1)
            myList.ListItems.Add(myListItem2)
            myList.ListItems.Add(myListItem3)

            ' Create a FlowDocument and add the section to it.
            Dim myFlowDocument As New FlowDocument()
            myFlowDocument.Blocks.Add(myList)

            Me.Content = myFlowDocument
        End Sub
    End Class
End Namespace

Not

List , ListItemCollection alt öğeleri yönetmek için kullanan tek Flow öğesidir.

Tablo

Table bir tablo oluşturmak için kullanılır. Table öğesi ile benzerdir, Grid ancak daha fazla özelliğe sahiptir ve bu nedenle daha fazla kaynak yükü gerektirir. GridBir olduğundan UIElement , veya içinde içerilmediği takdirde akış içeriğinde kullanılamaz BlockUIContainerInlineUIContainer . Hakkında daha fazla bilgi için Table bkz. Table.

Satır içi türetilmiş sınıflar

Çalıştır

Run biçimlendirilmemiş metin içermesi için kullanılır. RunAkış içeriğinde kapsamlı olarak kullanılacak nesneleri beklemeniz gerekebilir. Ancak, biçimlendirme ' de Run öğelerin açıkça kullanılması gerekmez. Run kod kullanarak akış belgeleri oluştururken veya düzenleme sırasında kullanılması gerekir. Örneğin, aşağıdaki biçimlendirmede ilki, ParagraphRun ikinci kez öğesini açıkça belirtir. Her iki paragraf de özdeş çıkış oluşturur.

<Paragraph>
  <Run>Paragraph that explicitly uses the Run element.</Run>
</Paragraph>

<Paragraph>
  This Paragraph omits the Run element in markup. It renders
  the same as a Paragraph with Run used explicitly. 
</Paragraph>

Not

.NET Framework 4 ' te başlayarak, TextRun nesnesinin özelliği bir bağımlılık özelliğidir. Özelliğini, gibi bir Text veri kaynağına bağlayabilirsiniz TextBlock . TextÖzelliği tek yönlü bağlamayı tam olarak destekler. TextÖzelliği, hariç olmak üzere iki yönlü bağlamayı da destekler RichTextBox . Örnek için bkz. Run.Text

Kapsamı

Span diğer satır içi içerik öğelerini birlikte gruplandırır. Bir öğe içindeki içeriğe hiçbir devralınmış işleme uygulanmaz Span . Ancak,, ve dahil,, ve ' den devralma öğeleri SpanHyperlinkBoldItalicUnderline metne biçimlendirme uygular.

Aşağıda Span metin, öğe ve içeren satır içi içerik içeren bir örneği verilmiştir BoldButton .

<FlowDocument xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

  <Paragraph>
    Text before the Span. <Span Background="Red">Text within the Span is
    red and <Bold>this text is inside the Span-derived element Bold.</Bold>
    A Span can contain more then text, it can contain any inline content. For
    example, it can contain a 
    <InlineUIContainer>
      <Button>Button</Button>
    </InlineUIContainer>
    or other UIElement, a Floater, a Figure, etc.</Span>
  </Paragraph>

</FlowDocument>

Aşağıdaki ekran görüntüsünde bu örneğin nasıl işlediğini gösterilmektedir.

Screenshot: Rendered Span example

Inlineuiconcontainer

InlineUIContainer bir UIElementButton içerik öğesine katıştırılması için öğeleri (örneğin, gibi bir denetimi) sağlar Inline . Bu öğe yukarıda açıklanan satır içi eştir BlockUIContainer . Aşağıda InlineUIContainer içine satır içi eklemek için kullanılan bir örnek verilmiştir ButtonParagraph .

<FlowDocument xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

  <Paragraph>
    Text to precede the button...

    <!-- Set the BaselineAlignment property to "Bottom" 
         so that the Button aligns properly with the text. -->
    <InlineUIContainer BaselineAlignment="Bottom">
      <Button>Button</Button>
    </InlineUIContainer>
    Text to follow the button...
  </Paragraph>

</FlowDocument>
using System;
using System.Windows;
using System.Windows.Media;
using System.Windows.Controls;
using System.Windows.Documents;

namespace SDKSample
{
    public partial class InlineUIContainerExample : Page
    {
        public InlineUIContainerExample()
        {
            Run run1 = new Run(" Text to precede the button... ");
            Run run2 = new Run(" Text to follow the button... ");

            // Create a new button to be hosted in the paragraph.
            Button myButton = new Button();
            myButton.Content = "Click me!";

            // Create a new InlineUIContainer to contain the Button.
            InlineUIContainer myInlineUIContainer = new InlineUIContainer();

            // Set the BaselineAlignment property to "Bottom" so that the
            // Button aligns properly with the text.
            myInlineUIContainer.BaselineAlignment = BaselineAlignment.Bottom;

            // Asign the button as the UI container's child.
            myInlineUIContainer.Child = myButton;

            // Create the paragraph and add content to it.
            Paragraph myParagraph = new Paragraph();
            myParagraph.Inlines.Add(run1);
            myParagraph.Inlines.Add(myInlineUIContainer);
            myParagraph.Inlines.Add(run2);

            // Create a FlowDocument and add the paragraph to it.
            FlowDocument myFlowDocument = new FlowDocument();
            myFlowDocument.Blocks.Add(myParagraph);

            this.Content = myFlowDocument;
        }
    }
}

Imports System.Windows
Imports System.Windows.Media
Imports System.Windows.Controls
Imports System.Windows.Documents

Namespace SDKSample
    Partial Public Class InlineUIContainerExample
        Inherits Page
        Public Sub New()
            Dim run1 As New Run(" Text to precede the button... ")
            Dim run2 As New Run(" Text to follow the button... ")

            ' Create a new button to be hosted in the paragraph.
            Dim myButton As New Button()
            myButton.Content = "Click me!"

            ' Create a new InlineUIContainer to contain the Button.
            Dim myInlineUIContainer As New InlineUIContainer()

            ' Set the BaselineAlignment property to "Bottom" so that the 
            ' Button aligns properly with the text.
            myInlineUIContainer.BaselineAlignment = BaselineAlignment.Bottom

            ' Asign the button as the UI container's child.
            myInlineUIContainer.Child = myButton

            ' Create the paragraph and add content to it.
            Dim myParagraph As New Paragraph()
            myParagraph.Inlines.Add(run1)
            myParagraph.Inlines.Add(myInlineUIContainer)
            myParagraph.Inlines.Add(run2)

            ' Create a FlowDocument and add the paragraph to it.
            Dim myFlowDocument As New FlowDocument()
            myFlowDocument.Blocks.Add(myParagraph)

            Me.Content = myFlowDocument
        End Sub
    End Class
End Namespace

Not

InlineUIContainer açıkça biçimlendirmede kullanılması gerekmez. Bunu atlarsanız, InlineUIContainer kod derlendiğinde yine de oluşturulur.

Şekil ve Floater

Figureve Floater , birincil içerik akışından bağımsız olarak özelleştirilebilecek yerleştirme özellikleriyle Flow belgelere içerik eklemek için kullanılır. Figure ya da Floater öğeler genellikle içeriğin bölümlerini vurgulamak veya tasarımın, ana içerik akışında destekleyici görüntüleri veya diğer içerikleri barındırmak ya da reklamlar gibi gevşek ilişkili içerikleri eklemek için kullanılır.

Aşağıdaki örnek, bir Figure metin paragrafına nasıl ekleneceğini gösterir.

<FlowDocument xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

  <Paragraph>
    <Figure 
      Width="300" Height="100" 
      Background="GhostWhite" HorizontalAnchor="PageLeft" >
      <Paragraph FontStyle="Italic" Background="Beige" Foreground="DarkGreen" >
        A Figure embeds content into flow content with placement properties 
        that can be customized independently from the primary content flow
      </Paragraph>
    </Figure>
    Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy
    nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi
    enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis
    nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure.
  </Paragraph>

</FlowDocument>
using System;
using System.Windows;
using System.Windows.Media;
using System.Windows.Controls;
using System.Windows.Documents;

namespace SDKSample
{
    public partial class FigureExample : Page
    {
        public FigureExample()
        {

            // Create strings to use as content.
            string strFigure = "A Figure embeds content into flow content with" +
                               " placement properties that can be customized" +
                               " independently from the primary content flow";
            string strOther = "Lorem ipsum dolor sit amet, consectetuer adipiscing" +
                              " elit, sed diam nonummy nibh euismod tincidunt ut laoreet" +
                              " dolore magna aliquam erat volutpat. Ut wisi enim ad" +
                              " minim veniam, quis nostrud exerci tation ullamcorper" +
                              " suscipit lobortis nisl ut aliquip ex ea commodo consequat." +
                              " Duis autem vel eum iriure.";

            // Create a Figure and assign content and layout properties to it.
            Figure myFigure = new Figure();
            myFigure.Width = new FigureLength(300);
            myFigure.Height = new FigureLength(100);
            myFigure.Background = Brushes.GhostWhite;
            myFigure.HorizontalAnchor = FigureHorizontalAnchor.PageLeft;
            Paragraph myFigureParagraph = new Paragraph(new Run(strFigure));
            myFigureParagraph.FontStyle = FontStyles.Italic;
            myFigureParagraph.Background = Brushes.Beige;
            myFigureParagraph.Foreground = Brushes.DarkGreen;
            myFigure.Blocks.Add(myFigureParagraph);

            // Create the paragraph and add content to it.
            Paragraph myParagraph = new Paragraph();
            myParagraph.Inlines.Add(myFigure);
            myParagraph.Inlines.Add(new Run(strOther));

            // Create a FlowDocument and add the paragraph to it.
            FlowDocument myFlowDocument = new FlowDocument();
            myFlowDocument.Blocks.Add(myParagraph);

            this.Content = myFlowDocument;
        }
    }
}

Imports System.Windows
Imports System.Windows.Media
Imports System.Windows.Controls
Imports System.Windows.Documents

Namespace SDKSample
    Partial Public Class FigureExample
        Inherits Page
        Public Sub New()

            ' Create strings to use as content.
            Dim strFigure As String = "A Figure embeds content into flow content with" & " placement properties that can be customized" & " independently from the primary content flow"
            Dim strOther As String = "Lorem ipsum dolor sit amet, consectetuer adipiscing" & " elit, sed diam nonummy nibh euismod tincidunt ut laoreet" & " dolore magna aliquam erat volutpat. Ut wisi enim ad" & " minim veniam, quis nostrud exerci tation ullamcorper" & " suscipit lobortis nisl ut aliquip ex ea commodo consequat." & " Duis autem vel eum iriure."

            ' Create a Figure and assign content and layout properties to it.
            Dim myFigure As New Figure()
            myFigure.Width = New FigureLength(300)
            myFigure.Height = New FigureLength(100)
            myFigure.Background = Brushes.GhostWhite
            myFigure.HorizontalAnchor = FigureHorizontalAnchor.PageLeft
            Dim myFigureParagraph As New Paragraph(New Run(strFigure))
            myFigureParagraph.FontStyle = FontStyles.Italic
            myFigureParagraph.Background = Brushes.Beige
            myFigureParagraph.Foreground = Brushes.DarkGreen
            myFigure.Blocks.Add(myFigureParagraph)

            ' Create the paragraph and add content to it.
            Dim myParagraph As New Paragraph()
            myParagraph.Inlines.Add(myFigure)
            myParagraph.Inlines.Add(New Run(strOther))

            ' Create a FlowDocument and add the paragraph to it.
            Dim myFlowDocument As New FlowDocument()
            myFlowDocument.Blocks.Add(myParagraph)

            Me.Content = myFlowDocument
        End Sub
    End Class
End Namespace

Aşağıdaki çizimde bu örneğin nasıl işlediğini gösterilmektedir.

Screenshot: Figure example

Figure ve Floater çeşitli yollarla farklılık gösterir ve farklı senaryolar için kullanılır.

Rakam

  • Konumlandırılabilir: sayfa, içerik, sütun veya paragrafa göre sabitlemek üzere yatay ve dikey tutturucularını ayarlayabilirsiniz. Ayrıca, HorizontalOffset ve VerticalOffset özelliklerini rastgele uzaklıklar belirtmek için de kullanabilirsiniz.

  • Birden fazla sütuna boyutlandırılabilir: Figure Yükseklik ve genişlik sayfasının, içeriğin veya sütun yüksekliğinin ya da genişliğinin katları olarak ayarlayabilirsiniz. Sayfa ve içerik söz konusu olduğunda, 1 ' den büyük katlara izin verilmeyeceğini unutmayın. Örneğin, a genişliğini Figure "0,5 Page" veya "0,25 Content" veya "2 Column" olarak ayarlayabilirsiniz. Yükseklik ve Genişlik ' i mutlak piksel değerlerine da ayarlayabilirsiniz.

  • Sayfalamaz: a içindeki içerik Figure içine uymuyorsa Figure , içeriğin ne kadar uygun olduğunu ve kalan içeriğin kaybedilmesi gerekir

Floater:

  • Konumlandırılamıyor ve kullanılabilir alan olduğu her yerde işleme alınacaktır. Sapmayı veya bağlantısını ayarlayamazsınız Floater .

  • Birden fazla sütuna boyutlandırılabilir: varsayılan olarak, Floater bir sütundaki boyutlar. WidthMutlak piksel değerine ayarlanılabilen bir özelliği vardır, ancak bu değer bir sütun genişliğinden büyükse yok sayılır ve Floater bir sütunda boyutlandırılır. Doğru piksel genişliğini ayarlayarak, boyutu bir sütundan daha az bir sütuna göre boyutlandırabilir, ancak boyutlandırma sütun göreli değildir, bu nedenle "0,5 sütun" Width için geçerli bir ifade değildir Floater . Floater Height özelliği yok ve bu yükseklik ayarlanamaz, bu da içeriğe bağlıdır

  • Floater sayfalar: belirtilen genişliğine sahip içeriği 1 ' den fazla sütun yüksekliğine genişlerse, Floater ve sonraki sütunda, sonraki sayfa vb.

Figure Boyut ve konumlandırmayı denetlemek istediğiniz tek başına içerikleri yerleştirmek için iyi bir yerdir ve içeriğin belirtilen boyuta sığması önemlidir. Floater Ana sayfa içeriğine benzer, ancak bundan ayrıldığından, akan daha fazla serbest akışlı içerik yerleştirmek için iyi bir yerdir.

LineBreak

LineBreak akış içeriğinde satır sonu oluşmasına neden olur. Aşağıdaki örnek öğesinin kullanımını gösterir LineBreak .

<FlowDocument xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
  <Paragraph>
    Before the LineBreak in Paragraph.
    <LineBreak />
    After the LineBreak in Paragraph.
    <LineBreak/><LineBreak/>
    After two LineBreaks in Paragraph.
  </Paragraph>

  <Paragraph>
    <LineBreak/>
  </Paragraph>

  <Paragraph>
    After a Paragraph with only a LineBreak in it.
  </Paragraph>
</FlowDocument>

Aşağıdaki ekran görüntüsünde bu örneğin nasıl işlediğini gösterilmektedir.

Screenshot: LineBreak example

Flow koleksiyon öğeleri

Yukarıdaki örneklerin çoğunda, BlockCollection ve, InlineCollection akış içeriğini programlı bir şekilde oluşturmak için kullanılır. Örneğin, öğesine öğe eklemek için Paragraph söz dizimini kullanabilirsiniz:

myParagraph.Inlines.Add(new Run("Some text"));

Bu Run öğesine öğesine ekler InlineCollectionParagraph . Bu, Run bir ın biçimlendirmesinde bulunan örtülü ile aynıdır Paragraph :

<Paragraph>
Some Text
</Paragraph>

Öğesinin kullanılmasına örnek olarak BlockCollection , aşağıdaki örnek yeni bir oluşturur Section ve sonra yeni bir içerik eklemek için BlockCollection yöntemini kullanır ParagraphSection .

Section secx = new Section();
secx.Blocks.Add(new Paragraph(new Run("A bit of text content...")));
Dim secx As New Section()
secx.Blocks.Add(New Paragraph(New Run("A bit of text content...")))

Akış koleksiyonuna öğe eklemenin yanı sıra öğeleri de kaldırabilirsiniz. Aşağıdaki örnek Inline , içindeki son öğeyi siler Span .

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

Aşağıdaki örnek, içindeki tüm içeriği ( Inline öğeleri) temizler Span .

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

Program aracılığıyla akış içeriğiyle çalışırken, büyük olasılıkla bu koleksiyonların kapsamlı bir şekilde kullanılmasını sağlayabilirsiniz.

Bir akış öğesinin InlineCollection alt öğelerini içermesi için bir (Inlines) veya BlockCollection (bloklar) kullanması, üst öğe tarafından hangi tür alt öğelerin ( Block veya Inline ) dahil edilip edilmeyeceğini belirtir. Akış içeriği öğeleri için kapsama kuralları, sonraki bölümde içerik şemasında özetlenir.

Not

Akış içeriğiyle kullanılan üçüncü bir tür koleksiyon vardır, ListItemCollection ancak bu koleksiyon yalnızca bir ile kullanılır List . Ayrıca, ile birlikte kullanılan birkaç koleksiyon vardır Table . Daha fazla bilgi için bkz. tabloya genel bakış .

İçerik şeması

Farklı akış içeriği öğelerinin sayısı verildiğinde, bir öğenin içerebileceği alt öğe türlerini izlemek çok fazla olabilir. Aşağıdaki diyagramda Flow öğelerinin kapsama kuralları özetlenmektedir. Oklar olası üst/alt ilişkileri temsil eder.

Diagram: Flow content containment schema

Yukarıdaki diyagramdan görünebileceği gibi, bir öğe için izin verilen alt öğeler bir öğe veya öğe olup olmadığı tarafından belirlenmeyebilir BlockInline . Örneğin, bir (bir öğe) yalnızca alt öğelere SpanInline sahip Inline olsa Figure da (aynı zamanda bir Inline öğe) yalnızca Block alt öğeleri olabilir. Bu nedenle, bir diyagram, başka bir öğenin hangi öğeye dahil edilebilir olduğunu hızlı bir şekilde belirlemek için faydalıdır. Örnek olarak, ' ın akış içeriğinin nasıl oluşturulacağını öğrenmek için diyagramı kullanalım RichTextBox .

1. bir ' ın içermesi gerekir ve bir FlowDocumentBlock ile türetilmiş nesne içermelidir. Yukarıdaki diyagramda karşılık gelen segment aşağıda verilmiştir.

Diagram: RichTextBox containment rules

Bu nedenle, biçimlendirmenin şu şekilde görünebileceğini burada bulabilirsiniz.

<RichTextBox>
  <FlowDocument>
    <!-- One or more Block-derived object… -->
  </FlowDocument>
</RichTextBox>

2. diyagrama göre,,,, ve dahil olmak üzere seçebileceğiniz birkaç öğe Paragraph vardır SectionTableListBlockUIContainer (yukarıdaki blok türetilmiş sınıflara bakın). Diyelim ki bir Table . Yukarıdaki diyagrama göre, bir Table içeren öğeleri içeren bir TableRowGroupTableRow öğesi içerir TableCellBlock . Yukarıdaki diyagramdan alınan karşılık gelen segment aşağıda verilmiştir Table .

Diagram: Parent/child schema for Table

Karşılık gelen biçimlendirme aşağıda verilmiştir.

<RichTextBox>
  <FlowDocument>
    <Table>
      <TableRowGroup>
        <TableRow>
          <TableCell>
            <!-- One or more Block-derived object… -->
          </TableCell>
        </TableRow>
      </TableRowGroup>
    </Table>
  </FlowDocument>
</RichTextBox>

3. yeniden, bir veya daha fazla öğe bir altında gereklidir TableCell . Basit hale getirmek için hücrenin içine biraz metin yerleştirelim. Bunu bir öğesi ile kullanarak yapabiliriz ParagraphRun . Aşağıda, bir ParagraphInline öğenin Run (bir Inline öğe) yalnızca düz metin alabilir olduğunu gösteren diyagramda karşılık gelen segmentler verilmiştir.

Diagram: Parent/child schema for Paragraph

Diagram: Parent/Child schema for Run

Aşağıda, biçimlendirme içindeki 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>

Metni özelleştirme

Genellikle metin bir akış belgesinde en yaygın içerik türüdür. Yukarıdaki nesneler, metnin nasıl işlendiğine ilişkin birçok yönü denetlemek için kullanılabilir olsa da, bu bölümde ele alınan metni özelleştirmek için başka yöntemler de vardır.

Metin süslemeleri

Metin süslemeleri metne alt çizgi, üst çizgi, taban çizgisi ve üstü çizili etkileri uygulamanıza olanak tanır (aşağıdaki resimlere bakın). Bu düzenlemeleriniz,,, TextDecorations ve dahil olmak üzere bir dizi nesne tarafından kullanıma sunulan özelliği kullanılarak eklenir InlineParagraphTextBlockTextBox .

Aşağıdaki örnek, öğesinin özelliğinin nasıl ayarlanacağını gösterir TextDecorationsParagraph .

<FlowDocument ColumnWidth="200">
  <Paragraph TextDecorations="Strikethrough">
    This text will render with the strikethrough effect.
  </Paragraph>
</FlowDocument>
Paragraph parx = new Paragraph(new Run("This text will render with the strikethrough effect."));
parx.TextDecorations = TextDecorations.Strikethrough;
Dim parx As New Paragraph(New Run("This text will render with the strikethrough effect."))
parx.TextDecorations = TextDecorations.Strikethrough

Aşağıdaki şekilde, bu örneğin nasıl işlediğini gösterilmektedir.

Screenshot: Text with default strikethrough effect

Aşağıdaki rakamlar, sırasıyla üst çizgi, taban çizgisive alt çizgi düzenlemelerinin nasıl işleneceğini gösterir.

Screenshot: Overline TextDecorator

Screenshot: Default baseline effect on text

Screenshot: Text with default underline effect

Tipografi

TypographyÖzelliği,,, ve dahil olmak üzere akışla ilgili içerikler tarafından sunulur TextElementFlowDocumentTextBlockTextBox . Bu özellik, metnin tipografik karakteristiklerini/çeşitlemelerini (küçük veya büyük harfler, üst simgeler ve alt simgeler, vb.) denetlemek için kullanılır.

Aşağıdaki örnek, Typography örnek öğesi olarak kullanarak özniteliğinin nasıl ayarlanacağını gösterir Paragraph .

<Paragraph
  TextAlignment="Left"
  FontSize="18" 
  FontFamily="Palatino Linotype"
  Typography.NumeralStyle="OldStyle"
  Typography.Fraction="Stacked"
  Typography.Variants="Inferior"
>
  <Run>
    This text has some altered typography characteristics.  Note
    that use of an open type font is necessary for most typographic
    properties to be effective.
  </Run>
  <LineBreak/><LineBreak/>
  <Run>
    0123456789 10 11 12 13
  </Run>
  <LineBreak/><LineBreak/>
  <Run>
    1/2 2/3 3/4
  </Run>
</Paragraph>

Aşağıdaki şekilde, bu örneğin nasıl işlediğini gösterilmektedir.

Screenshot: Text with altered typography

Buna karşılık aşağıdaki şekilde, varsayılan tipografik özelliklerle benzer bir örneğin nasıl işlediğini gösterilmektedir.

Screenshot: Text with altered typography

Aşağıdaki örnek, Typography özelliğinin programlı olarak nasıl ayarlanacağını gösterir.

Paragraph par = new Paragraph();

Run runText = new Run(
    "This text has some altered typography characteristics.  Note" +
    "that use of an open type font is necessary for most typographic" +
    "properties to be effective.");
Run runNumerals = new Run("0123456789 10 11 12 13");
Run runFractions = new Run("1/2 2/3 3/4");

par.Inlines.Add(runText);
par.Inlines.Add(new LineBreak());
par.Inlines.Add(new LineBreak());
par.Inlines.Add(runNumerals);
par.Inlines.Add(new LineBreak());
par.Inlines.Add(new LineBreak());
par.Inlines.Add(runFractions);

par.TextAlignment = TextAlignment.Left;
par.FontSize = 18;
par.FontFamily = new FontFamily("Palatino Linotype");

par.Typography.NumeralStyle = FontNumeralStyle.OldStyle;
par.Typography.Fraction = FontFraction.Stacked;
par.Typography.Variants = FontVariants.Inferior;
Dim par As New Paragraph()

Dim runText As New Run("This text has some altered typography characteristics.  Note" & "that use of an open type font is necessary for most typographic" & "properties to be effective.")
Dim runNumerals As New Run("0123456789 10 11 12 13")
Dim runFractions As New Run("1/2 2/3 3/4")

par.Inlines.Add(runText)
par.Inlines.Add(New LineBreak())
par.Inlines.Add(New LineBreak())
par.Inlines.Add(runNumerals)
par.Inlines.Add(New LineBreak())
par.Inlines.Add(New LineBreak())
par.Inlines.Add(runFractions)

par.TextAlignment = TextAlignment.Left
par.FontSize = 18
par.FontFamily = New FontFamily("Palatino Linotype")

par.Typography.NumeralStyle = FontNumeralStyle.OldStyle
par.Typography.Fraction = FontFraction.Stacked
par.Typography.Variants = FontVariants.Inferior

Tipografi hakkında daha fazla bilgi için bkz. WPF 'de tipografi .

Ayrıca bkz.