This article has been localized into Russian by the community.
Программное создание 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, и как видите, это вполне возможно.