This article is currently in the process of being translated into Russian (~92% done).
Программное создание FlowDocument
До сих пор мы создавали элементы FlowDocument напрямую в XAML. XAML-представление имеет смысл, т.к. оно очень похоже на представление в HTML, повсеместно используемое в интернете для создания страниц с информацией. Однако это не значит, что нельзя создать FlowDocument программно через Code-behind. Это выполнимо, т.к. каждый элемент представляет собой класс, который может быть создан и добавлен используя C# код.
В качестве простого примера ниже представлен "Hello, world!"-пример из одной из первых статей, созданных программно в Code-behind, а не через XAML.
<Window x:Class="WpfTutorialSamples.Rich_text_controls.CodeBehindFlowDocumentSample" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="CodeBehindFlowDocumentSample" Height="200" Width="300"> <Grid> <FlowDocumentScrollViewer Name="fdViewer" /> </Grid> </Window>
using System; using System.Windows; using System.Windows.Documents; using System.Windows.Media; namespace WpfTutorialSamples.Rich_text_controls { public partial class CodeBehindFlowDocumentSample : Window { public CodeBehindFlowDocumentSample() { InitializeComponent(); FlowDocument doc = new FlowDocument(); Paragraph p = new Paragraph(new Run("Hello, world!")); p.FontSize = 36; doc.Blocks.Add(p); p = new Paragraph(new Run("The ultimate programming greeting!")); p.FontSize = 14; p.FontStyle = FontStyles.Italic; p.TextAlignment = TextAlignment.Left; p.Foreground = Brushes.Gray; doc.Blocks.Add(p); fdViewer.Document = doc; } } }

Не слишком впечатляет, если сравнивать с небольшим количеством XAML кода, который требуется для достижения того же самого эффекта.
<FlowDocument> <Paragraph FontSize="36">Hello, world!</Paragraph> <Paragraph FontStyle="Italic" TextAlignment="Left" FontSize="14" Foreground="Gray">The ultimate programming greeting!</Paragraph> </FlowDocument>
Однако рассуждения об этом выходят за рамки статьи. Иногда имеет смысл управлять элементами именно программно из Code-behind, и как видите, это вполне возможно.