- •Лабораторная работа: Текст 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. Выборка текста из текстового файла с форматированием на лету
Отображение html-текста в WebBrowser из файла
Обратите внимание, что в предыдущем примере автоматически появляются полосы прокрутки, если HTML -документ не помещается в окне элемента WebBrowser. Фрагмент форматированного HTML -текста включать прямо в WebBrowser нельзя, поскольку XAML -редактор оболочки сразу начнет ругаться. Но во время выполнения загружать файл из кода можно.
В данном примере мы заранее создадим HTML -файл с простым форматированным текстом.
В Solution Explorer вызовите контекстное меню для узла WpfText3 и командой Add/Existing Item добавьте к проекту файл HtmlDoc.htm из прилагаемого каталога Source (или создайте свой HTML -документ и добавьте его к проекту той же командой)
Содержимое файла будет примерно таким
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Untitled Document</title>
<!--
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
-->
</head>
<body style="font-family:Arial, Helvetica, sans-serif">
<h2 align="center"><font color="#FF0000">Это небольшой фрагмент чистого HTML-текста</font></h2>
<ol>
<li>Шрифт Arial</li>
<li><font color="#0000FF">Цвет font color="#0000FF"</font></li>
<li><font face="Courier New">Шрифт Courier New </font></li>
<li><b>Стиль полужирный <b> </b></li>
<li><i>Стиль Italic <i> </i></li>
</ol>
</body>
</html>
Выделите этот файл и в панели Properties настройте его свойства так
Build Action = None
Copy to Output Directory=Copy if newer
В декларативный раздел XAML в контейнер <TabControl> добавьте новую вкладку <TabItem Header="HTML2">
Заполните ее следующим скриптом
<TabItem Header="HTML2" Selector.IsSelected="True">
<WebBrowser x:Name="webBrowser2" Initialized="webBrowser2_Initialized" />
</TabItem>
Обработчик события Initialized заполните так
private void webBrowser2_Initialized(object sender, EventArgs e)
{
Uri uri = new Uri(System.IO.Directory.GetCurrentDirectory() +
"\\HtmlDoc.htm", UriKind.Absolute);
this.webBrowser2.Navigate(uri);
}
Здесь мы применили несколько иной способ загрузки файла!
Запустите проект - получится примерно следующее
Вертикальную полосу прокрутки мне убрать в этом примере не удалось.
Отображение html-текста в WebBrowser из потока
Рассмотрим способ подключения HTML -текста из потока. В качестве источника текста будем использовать все тот же файл из предыдущего примера, полагая, что он будет находиться в одном каталоге со сборкой приложения в силу определенных нами ранее для него параметров.
В декларативный раздел XAML в контейнер <TabControl> добавьте новую вкладку <TabItem Header="HTML3">
Заполните ее следующим скриптом
<TabItem Header="HTML3" Selector.IsSelected="True">
<WebBrowser x:Name="webBrowser3" Initialized="webBrowser3_Initialized" />
</TabItem>
Обработчик события Initialized заполните так
private void webBrowser3_Initialized(object sender, EventArgs e)
{
Uri uri = new Uri("HtmlDoc.htm", UriKind.Relative);
System.IO.Stream source = Application.GetRemoteStream(uri).Stream;
this.webBrowser3.NavigateToStream(source);
}
Запустите проект - получится то же самое, что в предыдущем примере
