Содержание
3 | Страничная модель оконного интерфейса WPF и элементы управления содержимым | 114 |
3.1 | Страничные интерфейсы WPF | 114 |
3.2 | Элементы управления WPF | 121 |
3.3 | Лабораторная работа №3 «Создание многостраничных приложений WPF с элементами управления содержимым» | 133 |
3.4 | Методические указания к СРСП и СРС по теме «Высокоуровневые средства WPF для работы с документами» | 153 |
3.5 | Задания и контрольные вопросы для самопроверки по тематике самостоятельной работы | 117 |
4 | Список рекомендуемой литературы | 117 |
3 СТРАНИЧНАЯ МОДЕЛЬ ОКОННОГО ИНТЕРФЕЙСА WPF И ЭЛЕМЕНТЫ УПРАВЛЕНИЯ СОДЕРЖИМЫМ
3.1 Страничные интерфейсы WPF
В настоящее время страничная модель часто применятся в простых, облегчённых и в более сложных оконных приложениях. В страничных приложениях содержимое страниц встраивается в специальный навигационный каркас, поддерживающий навигационные ссылки и журнал навигации.
3.1.1 Классическим примером приложения с таким оконным интерфейсом является explorer. exe Windows 7. Образ окно проводника иллюстрирует рисунок 3.1.

Рисунок 3.1
Чтобы предоставить разработчикам возможность создавать настольные приложения в стиле web-приложений, в состав WPF включена собственная гибкая система страничной навигации. Встроенная модель страниц WPF позволяет разрабатывать приложения, использующие страничные функции, например, в мастере или справочной системе, и приложения, функционирующие непосредственно в браузере.
Существуют два типа страничных WPF приложений:
- автономные приложения Windows, в которых страницы используются для части или всего пользовательского интерфейса; подход следует применять в простых приложениях, чтобы навигационные и журнальные функции позволили упростить кодирование;
- браузерные приложения (приложения ХВАР), которые обслуживаются в Internet Explorer или Firefox и имеют ограниченные полномочия; подход следует применять, когда необходимо получить облегчённую, основанную на web-технологиях модель развёртывания.
Страничные приложения WPF для создания пользовательских интерфейсов использует в качестве контейнера высшего уровня класс System. Windows. Controls. Page.
Модель для создания страниц в WPF во многом схожа с моделью для создания окон Windows. Для каждой страницы WPF создаётся файл XAML и файл отделённого (partial) процедурного кода. Создавать объекты страниц можно и с помощью одного лишь кода. На этапе компиляции для каждого модуля страницы компилятор создаёт производный класс, который объединяет написанный разработчиком код с кодом связующих элементов, который генерируется автоматически. К таким элементам, прежде всего, относятся поля, которые ссылаются на каждый именованный элемент на странице.
На этапе проектирования приложения страницы являются самым высокоуровневым компонентом пользовательского интерфейса. Но во время выполнения приложения контейнером наивысшего уровня они уже не будут, они будут обслуживаться в другом контейнере, который владеет страницами и называется хостом.
В качестве такого контейнера WPF позволяет использовать:
- класс NavigationWindow (или элемент <NavigationWindow>), который представляет собой видоизменённую версию класса Window;
- элемент <Frame>, находящийся внутри другого окна;
- элемент <Frame>, находящийся внутри другой страницы;
- элемент <Frame>, обслуживаемый непосредственно в Internet Explorer или Firefox.
При создании автономного приложения WPF можно устанавливать свойство StartupUri элемента <Application> так, чтобы оно указывало на страницу; либо создать объект NavigationWindow вручную и затем загрузить первую страницу внутрь него; или же вставить страницы в специальное окно с помощью элемента управления Frame. Эти подходы предоставляют возможность задавать размер окна приложения, что является важным для придания приложению презентабельного вида при его первом запуске.
В случае создания браузерного приложения возможности для управления размером содержащего окна web-браузера не предоставляется и потому обязательно потребуется установить свойство StartupUri так, чтобы оно указывало на страницу.
Классы NavigationWindow и Frame определены в WPF как навигаторы. Навигатор - это класс, поддерживающий переход и журнал переходов.
3.1.2 Класс Page инкапсулирует функциональность страницы окна, его описание:
public class Page : FrameworkElement
<Page> Content </Page>
Подобно классу Window класс Page (элемент XAML-описания <Page>) допускает наличие только единственного вложенного элемента. Но класс Page не является элементом управления содержимым, он унаследован непосредственно от класса FrameworkElement. Класс Page является более простым и имеет небольшой набор дополнительных свойств, которые позволяют настраивать внешний вид страницы, взаимодействовать с владеющим им контейнером (хостом) и применять навигацию. Все эти свойства перечислены в таблице 3.1.
В классе Page нет эквивалентов для методов Hide() и Show(), доступных в классе Window. Для того чтобы показать страницу, используется механизм навигации.
Размер страницы обычно не устанавливается, он определяется обслуживающим её хостом. Если же свойства Width и Height страницы указаны, то страница принимает эти размеры, но часть её содержимого может быть усечена.
Наиболее простой способ позволить пользователю перемещаться с одной страницы на другую - это гиперссылки.
В WPF гиперссылки являются не отдельными, а внутри строчными потоковыми элементами, которые обязательно должны размещаться внутри другого поддерживающего их элемента.
Таблица 3.1
Имя | Описание |
Background | Принимает кисть, которая позволяет устанавливать заливку для фона |
Content | Принимает один элемент, который отображается на странице. Обычно в роли такого элемента выступает контейнер компоновки, такой как <Grid> или <StackPanel> |
Foreground, FontFamily и FontSize | Определяют внешний вид по умолчанию для текста внутри страницы. Значения этих свойств наследуются элементами внутри страницы. Например, если устанавливается заливка переднего плана и размер шрифта, по умолчанию содержимое внутри страницы получает эти же настройки |
WindowWidth, WindowHeight и WindowTitle | Определяют внешний вид окна, в которое упаковывается страница. Эти свойства позволяют управлять хостом путём установки его ширины, высоты и заголовка. Однако они действуют только в том случае, если страница обслуживается в окне (а не во фрейме) |
NavigationService | Возвращает ссылку на объект NavigationService, которую можно использовать для отправки пользователя на другую страницу программным путём |
KeepAlive | Определяет, должен ли объект страницы оставаться действующим после перехода пользователя на другую страницу. Это свойство используется для восстановления страниц из хронологии навигации |
ShowsNavigationUI | Определяет, должен ли хост для данной страницы отображать навигационные элементы управления. По умолчанию имеет значение true |
Title | Устанавливает имя, которое должно применяться для страницы в хронологии навигации. Хост не использует свойство Title для установки заголовка в строке заголовка: для этой цели у него есть свойство WindowTitle |
Ниже приведены примеры объединения текста и ссылок в элементе <TextBlock>, который является самым практичным контейнером для гиперссылок:
<TextBlock Margin="3" TextWrapping="Wrap"> Ссылка на страницу
<Hyperlink NavigateUri="Page2.xaml">Страница 2</Hyperlink>
</TextBlock>
<TextBlock Margin="3" TextWrapping="Wrap"> Ссылка на документ
<Hyperlink NavigateUri="file://D:/plan. htm">План</Hyperlink>
</TextBlock>
<TextBlock Margin="3" TextWrapping="Wrap"> Ссылка на сайт
<Hyperlink NavigateUri="http://parallel. ru">parallel. ru</Hyperlink>
</TextBlock>
Рисунок 3.2 иллюстрирует описание ссылок и результат навигации.
При визуализации гиперссылки отображаются традиционно, как подчёркнутый текст синего цвета.
Щелчки на ссылке можно обрабатывать двумя способами: реагировать на событие Click либо направлять пользователя на другую страницу.
Если выбирается ссылка на сайт, то в область страницы загружается целевая web-страница. Однако при использовании такого приёма обязательно должен быть присоединён обработчик к событию Application. DispatcherUnhandledException. Попытка посещения web-сайта может оказаться неудачной, в таком случае сеть возвращает ошибку, которая воплощается в исключение WebException.

Рисунок 3.2
Для корректной обработки этого исключения и предотвращения неожиданного завершения работы приложения, оно должно быть нейтрализовано с помощью обработчика, например такого:
public partial class App : Application
{
public App()
{
// Подписались на событие необработанных исключений
this. DispatcherUnhandledException += App_DispatcherUnhandledException;
}
void App_DispatcherUnhandledException(object sender,
System. Windows. Threading. DispatcherUnhandledExceptionEventArgs e)
{
if (e. Exception is . WebException)
{
MessageBox. Show("Web-сайт не найден.");
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
Основные порталы (построено редакторами)
