Главная » WPF » Приложения WPF

0

У каждого из нас есть собственное  определение  того, что такое приложение; Мое любимое звучит так: «программа, основное назначение которой – взаимо# действие с человеком». Платформа Windows Presentation Foundation вся посвя# щена представлению информации в удобном для человека виде. Неудивительно поэтому, что я считаю правильным начать углубленное ее исследование  именно с уровня приложений.

В своей модели приложения WPF стремится пройти по узкой тропке, с одной стороны, предоставив  набор гибких служб для построения  приложений, а, с дру# гой, – не вводя излишне  жестких  правил,  из#за которых нельзя  будет создавать новые решения.  Было  решено предложить набор интегрированных служб, кото# рыми разработчики могли бы овладевать постепенно. Приложения для WPF сос# тоят из различных компонентов пользовательских интерфейсов, ресурсов, соеди# нений со службами  и данными и конфигурационной информации. При рассмот# рении  структуры  приложения, полезно  выделять  высокоуровневые  строитель# ные блоки пользовательского интерфейса (окна, страницы  и элементы  управле# ния)  и службы  прикладного уровня  (навигацию, ресурсы, конфигурацию и раз# мещение).  Все это мы рассмотрим  в данной главе.

Принципы организации приложения

При разработке  WPF мы стремились  создать облегченную  модель приложе# ния. Мы понимали, что базовая платформа должна быть максимально гибкой, од# нако  хотели  придерживаться некоторых  основополагающих принципов.  Было ясно,  что надо построить  такую  систему,  которая  позволяла бы переходить  от

«тонких»  Web#приложений к полномасштабным приложениям для  персональ# ного компьютера. Мы ставили себе целью не только добиться такой масштабиру# емости, но и взять все лучшее из обоих миров и предоставить  это в распоряжение разработчика программ как того, так и другого вида.

Масштабируемые приложения

Один  из базовых  принципов WPF – обеспечить  масштабируемость, то есть возможность создавать широкий спектр приложений – от «тонких» клиентов, ра# ботающих  в браузере,  и небольших  программ,  легко развертываемых на персо# нальном компьютере, до полномасштабных приложений, требующих наличия специального  установщика.  Поэтому несмотря на то, что всегда создается объект Application  и запускается его метод Run, простое WPF#приложение можно напи# сать на одном лишь языке разметки.

Создадим  новый файл HelloWorld.xaml и поместим в него следующий  текст:

<Page xmlns=’http://schemas.microsoft.com/winfx/2006/xaml/presentation’ WindowTitle=’Hello World’>

<TextBlock FontSize=’24’>Hello World</TextBlock>

</Page>

Для запуска этого приложения достаточно дважды щелкнуть  мышью по XAML#файлу,  и мы увидим  окно, изображенное на рис. 2.1. Впрочем, это прос# тейшее приложение мало что умеет, кода#то в нем нет. Мы можем реализовать несложное интерактивное взаимодействие с помощью анимации и привязки к дан# ным, но, чтобы наделить приложение логикой, необходимо добавить код.

Чтобы написать для страницы код, нужно присвоить этой странице имя в смыс# ле CLR, добавив атрибут x:Class. Мы можем также включить атрибут x:Name в тег TextBlock,  чтобы в дальнейшем  получить к нему доступ из кода.

<Page x:Class=’EssentialWPF.HelloWorld’ xmlns=’http://schemas.microsoft.com/winfx/2006/xaml/presentation’ xmlns:x=’http://schemas.microsoft.com/winfx/2006/xaml’ WindowTitle=’Hello World’>

<TextBlock x:Name=’text1’ FontSize=’24’>Hello World</TextBlock>

</Page>

Рис. 2.1. Простейшее приложение, исполняемое в браузере

Теперь можно написать для этой страницы код. Подойдет любой .NET#сов# местимый язык программирования; мы остановимся на C#. В качестве текста бу# дем показывать  текущее время:

using System;

using System.Windows;

using System.Windows.Controls;

namespace EssentialWPF {

public partial class HelloWorld : Page {

public HelloWorld() { InitializeComponent();

text1.Text = «Now is: « + DateTime.Now.ToString();

}

}

}

Раз имеется код, проект необходимо откомпилировать. В любой компилируе# мый проект, который  порождает  исполняемую программу  (как, например,  наше приложение), имеет смысл включить  определение  приложения. Для этого мы воспользуемся базовым объектом Application  и зададим для него атрибут StartupUri в нашем XAML#файле:

<Application xmlns=’http://schemas.microsoft.com/winfx/2006/xaml/presentation’ StartupUri=’helloworld.xaml’ />

Последний шаг преобразования приложения, состоящего только из разметки, в приложение, включающее код, – компиляция проекта. Для этого необходим файл проекта,  содержащий  инструкции программе  MSBuild.  По большей  части содер# жимое файла проекта1  стандартно  (и генерируется автоматически инструментами типа Visual Studio). Но наши три файла мы должны включить самостоятельно:

<Project DefaultTargets=»Build»

xmlns=»http://schemas.microsoft.com/developer/msbuild/2003»>

<!— …опущенные части файла проекта … —>

<PropertyGroup>

<HostInBrowser>true</HostInBrowser>

</PropertyGroup>

<ItemGroup>

<Page Include=»HelloWorld.xaml» />

<ApplicationDefinition Include=»App.xaml» />

<Compile Include=»HelloWorld.xaml.cs» />

</ItemGroup>

<!— …опущенные части файла проекта … —>

</Project>

В  ходе  построения   проекта  будет  создан  файл  HelloWorld.xbap (XBAP   – XAML  Browser  Application  – XAML#приложение для  браузера).  Если  два раза щелкнуть  по нему мышью, то появится окно, показанное  на рис. 2.2.

Рис. 2.5. Ссылка на ресурс в Интернете

Стиль персональных приложений

Многие  идеи  программирования персональных приложений –  многоокон# ность, всплывающие подсказки,  интеграция с меню Пуск,  управление  буфером обмена, поддержка  работы в автономном  режиме, интеграция с файловой систе# мой и т.д. – настолько укоренились в сознании разработчиков, что мы даже не ду# маем о них.

Один из наиболее наглядных  стилистических признаков персонального при# ложения  – оконная модель. В приложении на базе User32 легко реализуются од# нодокументный (SDI) или многодокументный (MDI) интерфейс, диалоговые ок# на и мастера (таблица  2.1). Microsoft  Office Word  2003 построен в соответствии с однодокументной моделью: каждый документ открывается в отдельном окне верхнего уровня, а вместе с закрытием  последнего документа завершается и само приложение. В Adobe Photoshop CS используется многодокументная модель: су# ществует  одно  окно  верхнего  уровня,  у которого  может  быть  много  дочерних окон, в каждом из которых отображаются различные виды открытого документа. Photoshop завершается,  когда закрывается окно верхнего уровня.

Модель

Определение

Типичное  применение

Однодокументный интерфейс (SDI)

Каждый документ отображается в отдельном окне верхнего уровня. Для переключения между документами используется системная панель задач. Приложение завершается вместе с закрытием последнего документа.

Редакторы общего назначения, предназначенные для работы с документами,  электронными таблицами  и электронной почтой (например, Microsoft Office Word  2003).

Диалоговое  окно

Приложение исполняется как обособленное логическое действие. Создается одно окно верхнего уровня, и приложение завершается,  когда подходит к концу логическое действие.

Редко используемые инструменты настройки (например, для изменения параметров дисплея, добавления новых пользователей, установки обновлений).

SDI#навигация

Каждый  экземпляр окна навигации соответствует логическому  сеансу браузера.

Нечасто  выполняемые задачи (например, заказ билетов, покупки  в Интернет#магазине).

Навигация в духе браузера

Приложение запускается путем щелчка по ссылке. Различные его части активируются щелчками  по ссылкам внутри единственного экземпляра браузера. Приложение никогда не завершается,  но пользователь может уйти в другое место.

Навигация по информационному пространству,  скажем, по энциклопедии или хранилищу документов  (например, www.msn.com).

Таблица 2.1. Оконные модели

По мере развития Интернета появилась новая платформа для создания приложе# ний: браузер. В такого рода приложениях используется лишь одна оконная модель – навигационная. Есть примеры Web#приложений, в которых реализована модель ди# алога, однодокументный и даже многодокументный интерфейс,  но для этого приш# лось заново реализовать многие механизмы, характерные для таких моделей.

WPF стремится  унифицировать все оконные  модели  и дать разработчикам возможность смешивать  в одном приложении разные модели, а также создавать свои собственные. Но при всей гибкости WPF нужно ясно осознавать,  какая мо# дель для каких задач наиболее приспособлена.

WPF сознательно не поддерживает оконную модель MDI. Когда начиналась ра# бота над WPF (в конце 2000 года), наметился отход от MDI#приложений. Реализа# ция поддержки  MDI  требует много работы, и разработчики пришли к выводу, что игра не стоит свеч, особенно если учесть стремление  поддержать новые стили при# ложений (многооконный интерфейс с вкладками в духе Visual Studio 2005, навига# цию a la Internet Explorer и т.д.). Когда в 2003 году вышел первый анонс WPF,  пос# тупило много просьб включить поддержку MDI, но к тому моменту интегрировать

ее в продукт  было уже поздно. Есть два обходных пути решения  этой проблемы: воспользоваться реализацией MDI,  имеющейся  в Windows Forms,  или  написать собственный  менеджер дочерних окон. Для этого нужно не так уж много кода, но получившийся менеджер  вряд  ли будет полнофункциональным (легко  написать

80% оконного менеджера и очень трудно оставшиеся  20%). Если ваше приложение не может обойтись без MDI, я бы рекомендовал  обратиться  к Windows Forms.

Авторы приложений не обязаны  ограничиваться единственной моделью во всем приложении. Например, почтовая  программа  могла бы использовать нави# гацию в стиле браузера или SDI для просмотра сообщений, а для составления но# вого сообщения  переключаться на модель SDI. Программа  для покупок в Интер# нете может работать как приложение в SDI#навигацией,  пока пользователь изу# чает витрину  магазина, а в момент оформления заказа, когда запрашиваются де# тали метода платежа и доставки, переключаться в режим диалога.

Три названных принципа  – масштабируемость, стиль Web и стиль персональ# ных приложений – пронизывают почти  все аспекты  модели  приложения. Рас# смотрев суть этих принципов,  мы можем перейти  к деталям, чтобы на деле уви# деть, как все это работает.

Источник: К. Андерсон  Основы  Windows Presentation Foundation. Пер. с англ. А. Слинкина — М.: ДМК Пресс, 2008 — 432 с.: ил.

По теме:

  • Комментарии