- •Лабораторная работа: Текст wpf Введение
- •Упражнение 1. Простые текстовые элементы
- •Создание заготовки решения
- •Элемент TextBlock с анимацией
- •Элемент TextBlock с текстурой символов
- •Автоматический перенос слов в TextBlock
- •Использование дополнительных шрифтов
- •Элементы TextBox и PasswordBox
- •Упражнение 2. Поддержка документов нефиксированного формата
- •Использование FlowDocument с контейнером по умолчанию
- •Использование контейнера RichTextBox
- •Использование контейнера FlowDocumentScrollViewer
- •Использование контейнера FlowDocumentPageViewer
- •Пример из msdn
- •Загрузка FlowDocument из xaml-файла
- •Упражнение 3. Работа в wpf с html-документами
- •Просмотр html-документов в WebBrowser
- •Отображение html-текста в WebBrowser из файла
- •Отображение html-текста в WebBrowser из потока
- •Еще один способ загрузки html-документа из потока
- •Упражнение 4. Преобразование html- в xaml-документ на лету
- •Упражнение 5. Преобразование html- в xaml-документ с записью в файл
- •Пражнение 6. Выборка текста из текстового файла с форматированием на лету
Использование контейнера 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", включающего оптимальный параграф
