Класс Application

Класс System.Windows.Application помогает организовать точку входа для оконного приложения WPF. Этот класс содержит метод Run(), поддерживающий цикл обработки сообщений системы для указанного окна до тех пор, пока окно не будет закрыто:

Window myWindow = new Window();

Application myApp = new Application();

myApp.Run(myWindow);

Свойство StartupUri класса Application служит для указания главного окна приложения. Если главное окно задано, метод Run() можно вызывать без аргументов:

Application app = new Application();

app.StartupUri = new Uri("MainWindow.xaml", UriKind.Relative);

app.Run();

При разработке в Visual Studio для каждого оконного приложения WPF создаётся класс, наследуемый от Application, который разделён на XAML-разметку и часть с кодом. Именно в разметке XAML задаётся StartupUri:

<Application x:Class="WpfLayout.App"

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

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

StartupUri="MainWindow.xaml">

</Application>

Класс Application содержит несколько полезных свойств. При помощи статического свойства Application.Current можно получить ссылку на объект, представляющий текущее приложение. Коллекция Windows содержит все открытые окна приложения. Стартовое окно хранится в свойстве MainWindow (оно доступно для чтения и записи). Свойство ShutdownMode принимает значения из одноимённого перечисления и задаёт условие закрытия приложения. Словарь Properties позволяет хранить произвольную информацию с ключами любого типа и может использоваться для данных, разделяемых между окнами.

События класса Application включают Startup и Exit, Activated и Deactivated, а также событие SessionEnding, генерируемое при выключении компьютера или окончании сессии Windows. События обычно обрабатываются путём перекрытия виртуальных методов, вызывающих их генерацию.

Приложения на основе страниц

В WPF можно создавать приложения в виде набора страниц с возможностью навигации между страницами. Отдельная страница представлена объектом класса System.Windows.Controls.Page. Любая страница обслуживается навигационным контейнером, в качестве которого могут выступать объекты классов NavigationWindow или Frame.

Рассмотрим следующий пример. Создадим в Visual Studio WPF-приложение и добавим к проекту страницу MainPage.xaml:

<Page x:Class="WpfApplication.MainPage"

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

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

WindowHeight="220" WindowWidth="400"

WindowTitle="Page Application">

This is a simple page.

</Page>

В файле Арр.xaml установим StartupUri="MainPage.xaml", чтобы выполнение приложения началось со страницы MainPage.xaml. Так как в качестве StartupUri указана страница, а не окно, при запуске приложения автоматически будет создан новый объект NavigationWindow для выполнения роли навигационного контейнера. Класс NavigationWindow наследуется от Window и выглядит как обычное окно, за исключением кнопок навигации, которые отображаются сверху (показ этих кнопок можно отключить).

Рис. 4. Страница в контейнере NavigationWindow.

Класс Page похож на упрощённую версию класса Window. Основные свойства класса Page перечислены в табл. 3.

Таблица 3

Основные свойства класса Page

Имя Описание
Background Фон страницы, который задаётся с помощью объекта Brush
Content Элемент, который отображается на странице. Обычно в роли такого элемента выступает контейнер компоновки
Foreground, FontFamily, FontSize Цвет, вид и размер текста внутри страницы. Значения этих свойств наследуются элементами внутри страницы
WindowWidth, WindowHeight, WindowTitle Свойства определяют внешний вид окна NavigationWindow, в которое упаковывается страница
NavigationService Возвращает ссылку на объект NavigationService, который можно использовать для программной навигации
KeepAlive Определяет, должен ли сохраняться объект страницы после перехода пользователя на другую страницу
ShowsNavigationUI Определяет, должны ли в обслуживающем страницу контейнере отображаться навигационные элементы управления
Title Устанавливает имя, которое должно применяться для страницы в хронологии навигации

Отметим, что в классе Page нет эквивалентов для методов Hide() и Show(), доступных в классе Window. Если потребуется показать другую страницу, придётся воспользоваться одним из видов навигации. Навигационные контейнеры и класс NavigationService поддерживают метод Navigate(), который удобно использовать для программной навигации. Метод Navigate() принимает в качестве параметра или объект страницы, или адрес страницы (обычно это имя XAML-файла):

// предполагается, что код расположен в методе страницы

// навигация по объекту страницы

PhotoPage nextPage = new PhotoPage();

this.NavigationService.Navigate(nextPage);

// или навигация по URI

var nextPageUri = new Uri("PhotoPage.xaml", UriKind.Relative);

this.NavigationService.Navigate(nextPageUri);

Гиперссылки – это простой способ декларативной навигации. В WPF гиперссылка представлена объектом класса Hyperlink, который внедряется в текстовый поток. Щелчки на ссылке можно обрабатывать при помощи события Click, или установить страницу перехода в свойстве NavigateUri (только если Hyperlink размещается на странице). При этом NavigateUri может указывать не только на объект Page, но и на веб-содержимое.

<TextBlock>

Click <Hyperlink NavigateUri="PhotoPage.xaml">here</Hyperlink>

</TextBlock>

NavigationWindow поддерживает журнал показанных страниц и содержит две кнопки «назад» и «вперёд». Методы навигационного контейнера GoBack() и GoForward() позволяют перемещаться по журналу страниц, используя код.

Как было сказано выше, в качестве навигационного контейнера можно использовать элемент управления Frame. Он включает свойство Source, которое указывает на подлежащую отображению страницу. Так как Frame – обычный элемент управления, он может размещаться в заданном месте окна Window или страницы Page. В последнем случае образуются вложенные фреймы.

Приложения XBAP

Приложения ХВАР (XAML Browser Application) – это приложения, которые выполняются внутри браузера. Приложения ХВАР являются полноценными приложениями WPF, но имеют несколько особенностей:

1. Приложение ХВАР отображается в окне браузера, но запускается в виде отдельного процесса, управляемого CLR. Следовательно, на компьютере клиента должен быть установлен.NET Framework версии 3.0 или выше.

2. Приложению ХВАР предоставляются те же разрешения, что и приложению.NET, которое запускается из интернета или локальной интрасети. Это означает, что по умолчанию приложение ХВАР не может записывать файлы, взаимодействовать с ресурсами компьютера, подключаться к базам данных или отображать полнофункциональные окна.

3. Приложения ХВАР не инсталлируются. При запуске приложения загружаются с сервера или локального диска и помещаются в кэш браузера.

Visual Studio предлагает для приложения ХВАР шаблон WPF Browser Application. Создав проект по этому шаблону, можно приступать к разработке страниц точно так же, как и при использовании NavigationWindow. Для развёртывания готового приложения XBAP на веб-сервер нужно скопировать в виртуальный каталог следующие файлы:

Имя-Приложения.ехе – файл содержит скомпилированный IL-код.

Имя-Приложения.ехе.manifest – XML-документ с перечнем требований данного приложения (например, версий.NET-сборок).

Имя-Приложения.xbap. – точка входа в приложение; это файл пользователь должен запросить в браузере, чтобы установить данное приложение ХВАР.

Самое сложное при создании приложения ХВАР – оставаться в рамках ограниченной модели безопасности. Один из простых способов узнать, разрешено ли выполнение того или иного действия – написать какой-то тестовый код и испробовать его. Также все необходимые детали можно найти в документации по WPF.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: