- •Лабораторная работа: Текст 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. Выборка текста из текстового файла с форматированием на лету
Упражнение 2. Поддержка документов нефиксированного формата
Классы-упаковки содержимого нефиксированного формата
FlowDocumentReader
RichTextBox
FlowDocumentScrollViewer
FlowDocumentPageViewer
имеют дочерний элемент FlowDocument. В свою очередь, FlowDocument задает строгую модель содержимого для своего дочернего содержимого. Дочерние элементы верхнего уровня, содержащиеся в FlowDocument, должны быть производными от Block и называются блочными. Допустимыми дочерними элементами верхнего уровня в FlowDocument являются следующие блоки:
Блок |
Описание |
Paragraph |
Содержит текст, возможно форматированный. |
List |
Содержит списки разного типа (нумерованный, маркированный и т. д.). |
Table |
Содержит таблицы, похожие на таблицы Microsoft Word или HTML. |
BlockUIContainer |
Содержит различные элементы пользовательского интерфейса, становящиеся частью размещения. |
Section |
Содержит группу прочих блоков. Разделы удобны для применения общих атрибутов к группам блоков, например, одни и те же атрибуты шрифта для нескольких абзацев. |
Внутри блоков дополнительное форматирование текста обеспечивается элементами, которые называются внутристрочными элементами. К ним относятся
элемент Bold
элемент Italic
элемент LineBreak
элемент List
элемент ListItem
элемент Paragraph
элемент Run
элемент Section
элемент Span
элемент Underline
Внутристрочные элементы могут быть вложенными друг в друга внутри блока или вместе с родительским блоком вложены в другой блок.
Некоторые элементы могут дополнительно настраиваться, например, такими атрибутами, как
BreakPageBefore=True" - начать с новой страницы
FontSize="24" - размер шрифта
Typography.Variants="Superscript" - надстрочный
Typography.Variants="Subscript" - подстрочный
TextIndent="25" - отступ первой строки блока
TextIndent="-15" - выступ первой строки блока
Margin="20,0,0,0" - отступ блока слева
TextAlignment="Center" - текст посредине контейнера рендеринга (представления)
MarkerStyle="None" - тип маркера в элементе List
Использование FlowDocument с контейнером по умолчанию
Создание экземпляра класса FlowDocument автоматически запускает родительский контейнер FlowDocumentReader, который размещает содержимое и имеет стандартную панель управления документом.
Добавьте к решению новый проект WpfText2 типа WPF Application и назначьте его стартовым
В декларативный раздел XAML добавьте контейнер <TabControl> с вкладкой <TabItem Header="Text1">
Заполните файл Window1.xaml следующим кодом
<Window x:Class="WpfText2.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Background="LightGray"
Title="Window1" MinHeight="300" MinWidth="300" Height="300" Width="300">
<TabControl>
<TabItem Header="Text1">
<FlowDocument Background="White">
<Paragraph TextAlignment="Center" FontWeight="Bold">
Потоковый
<Span Foreground="Red"> документ</Span>
<Italic>с разбивкой на страницы</Italic>
</Paragraph>
<List MarkerStyle="Decimal" FontFamily="Arial">
<ListItem>
<Paragraph>Первый элемент ListItem</Paragraph>
</ListItem>
<ListItem>
<Paragraph>Второй элемент ListItem</Paragraph>
</ListItem>
<ListItem>
<Paragraph>Третий элемент ListItem</Paragraph>
</ListItem>
</List>
<Paragraph FontSize="12">Класс FlowDocument поддерживает списки, определения
<Bold>
<Span FontFamily="Comic Sans MS" FontSize="12" Foreground="Blue">
семейств шрифтов, цвет
</Span>
</Bold> размеры и стили.
</Paragraph>
</FlowDocument>
</TabItem>
</TabControl>
</Window>
Запустите приложение, поизменяйте размер окна и разберитесь с кодом
Результат будет таким
