Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
WPF-практика 3 Текст.doc
Скачиваний:
4
Добавлен:
01.07.2025
Размер:
1.59 Mб
Скачать

Использование контейнера FlowDocumentPageViewer

Использование контейнера FlowDocumentPageViewer для FlowDocument позволяет представлять документ как одну страницу без средства поиска текста и разбивки его на страницы и колонки, но оставляет панель изменения масштаба и навигации. Однако в самом FlowDocument есть свойства, позволяющие настраивать обычный и многоколоночный текст. Вот некоторые из них

  • TextAlignment="Justify" - выравнивание текста по обеим границам колонок (включен по умолчанию)

  • IsHyphenationEnabled="True" - включение расстановки переносов (при наличии словарей)

  • IsOptimalParagraphEnabled="True" - включение оптимального абзаца, выравнивающего пробелы между словами за счет разрежения символов в самих словах при режиме TextAlignment="Justify"

  • ColumnGap="25" - ширина между колонками в логических пикселах

  • ColumnWidth="150" - предпочтительная (минимальная) ширина колонки

  • IsColumnWidthFlexible="False" - это значение флага явно запрещает дозаполнять окно просмотра и устанавливает жесткую ширину колонки

  • ColumnRuleWidth="5" - ширина вертикальных линеек, разделяющих колонки текста

  • ColumnRuleBrush="Red" - цвет линеек

  • В контейнер <TabControl> добавьте вкладку <TabItem Header="Text4"> и заполните ее следующим кодом

<TabItem Header="Text4">

<FlowDocumentPageViewer>

<FlowDocument

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

Background="White"

ColumnWidth="150"

ColumnRuleWidth="2"

ColumnRuleBrush="Red"

ColumnGap="30"

IsHyphenationEnabled="True"

IsOptimalParagraphEnabled="True"

>

<Paragraph FontSize="18" FontWeight="Bold" TextAlignment="Center">

Примеры форматирования FlowDocument & FlowDocumentPageViewer

</Paragraph>

<Paragraph>

Это абзац с атрибутами по умолчанию.

</Paragraph>

<Paragraph>

Это еще один абзац с атрибутами по умолчанию.

</Paragraph>

<Paragraph FontSize="18">Абзац с FontSize="18"</Paragraph>

<Paragraph FontSize="15">Абзац с FontSize="15"</Paragraph>

<Paragraph FontSize="15">Список <List FontFamily="Arial"></Paragraph>

<List FontFamily="Arial">

<ListItem>

<Paragraph>ListItem 1</Paragraph>

</ListItem>

<ListItem>

<Paragraph>ListItem 2</Paragraph>

</ListItem>

<ListItem>

<Paragraph>ListItem 3</Paragraph>

</ListItem>

<ListItem>

<Paragraph>ListItem 4</Paragraph>

</ListItem>

<ListItem>

<Paragraph>ListItem 5</Paragraph>

</ListItem>

</List>

<Paragraph>

<Bold>Это элемент <Bold> внутри абзаца <Paragraph></Bold>

</Paragraph>

<Paragraph>

<Underline>Это элемент Underline внутри абзаца</Underline>

</Paragraph>

<Paragraph>

<Bold>

<Underline>Подчеркнутый внутри полужирного</Underline>

</Bold>

</Paragraph>

<Paragraph>

<Italic>Это элемент <Italic></Italic>

</Paragraph>

<Paragraph>

<Span>Элемент Span с настройками по умолчанию</Span>

</Paragraph>

<Paragraph>

<Run>Элемент Run с настройками по умолчанию</Run>

</Paragraph>

<Paragraph FontSize="15">Subscript, Superscript</Paragraph>

<Paragraph>

<Run Typography.Variants="Superscript">This text is Superscripted.</Run>

This text isn't.

</Paragraph>

<Paragraph>

<Run Typography.Variants="Subscript">This text is Subscripted.</Run>

This text isn't.

</Paragraph>

<Paragraph TextIndent="-25" Margin="25,0">

If a font does not support a particular form (such as Superscript)

a default font form will be displayed.

</Paragraph>

<Paragraph FontSize="15">Blocks, breaks, paragraph</Paragraph>

<Section>

<Paragraph>A block section of text</Paragraph>

</Section>

<Section>

<Paragraph>Another block section of text</Paragraph>

</Section>

<Paragraph>

<LineBreak/>

</Paragraph>

<Section>

<Paragraph>... and another section, preceded by a LineBreak</Paragraph>

</Section>

<Section BreakPageBefore="True"/>

<Section>

<Paragraph>... and another section, preceded by a PageBreak</Paragraph>

</Section>

<Paragraph>Finally, a paragraph. Note the break between this paragraph ...</Paragraph>

<Paragraph TextIndent="25">... and this paragraph, and also the left indention.</Paragraph>

</FlowDocument>

</FlowDocumentPageViewer>

</TabItem>

Здесь мы применили основной набор элементов форматирования текста 'на лету'. Обратите внимание, что в разметке угловые скобки кодируются как в HTML. Другие управляющие символы разметки кодируются аналогично, например, ' & ' кодируется как ' & '. Знак подчеркивания ' _ ' считается служебным для выделения горячих клавиш в меню, поэтому в ином употреблении должен экранироваться таким же знаком подчеркивания.

Параметры настройки FlowDocument разбивают текст на колонки, задают ширину колонок, расстояние между ними и вертикальные линейки. Определение пространств имен в дескрипторе FlowDocument здесь роли не играет, но должно обязательно присутствовать для успокоения редактора, если контейнер FlowDocument редактируется оболочкой автономно как внешний файл документа.

  • Запустите приложение, поизменяйте размер окна и разберитесь с кодом

Результат будет таким

увеличить изображение

Обратите внимание, что в длинных словах кириллический текст объект FlowDocument не переносит, а латиницу - переносит.

  • Проверьте действие атрибута IsOptimalParagraphEnabled="True", включающего оптимальный параграф