В данной статье мы рассмотрим из чего состоит проект под WP7 на Silverlight. Для примера нам вполне подойдёт базовый шаблон проекта, который предлагает нам среда разработки. Создадим новый Windows Phone Application. В нашем Solution Explorer’e мы можем увидеть абсолютно всё, что нам предлагается для старта.

Я специально развернул папку Properties, чтобы вы увидели её содержимое, которое чрезвычайно важно. Файл AppManifest содержит информацию, которая необходима, чтобы сгенерировать XAP файл приложения. Именно этот файл загружается в телефон, и он одновременно является пакетом приложения и своеобразным исполняемым файлом.

Файл AssemblyInfo.cs содержит информацию о головной сборке приложения.

Самый интересный, пожалуй, файл из этой папки – WMAppManifest.xml. Посмотрим на него поподробнее. Среди всех настроек в этом xml файле выделяются:


<App xmlns="" ProductID="{6233ea80-767b-4cb5-a26e-313740c3ce2a}" Title="WP7HelloWorld" RuntimeType="Silverlight" Version="1.0.0.0" Genre="apps.normal" Author="WP7HelloWorld author" Description="Sample description" Publisher="WP7HelloWorld">

Важные свойства приложения:

Title – заголовок вашего приложения в телефоне, Author – указывается автор приложения, Publisher – издатель приложения, Genre – жанр приложения, значение может быть также apps.games.

Следующая важная настройка из этого файла:

<IconPath IsRelative="true" IsResource="false">ApplicationIcon.png</IconPath>

Здесь прописывается путь относительно корня вашего приложения к иконке, которая будет сопровождать ваше приложение в меню аппарата.

А вот как задаётся стартовая страница приложения в разделе Tasks:

<DefaultTask  Name ="_default" NavigationPage="MainPage.xaml"/>

К примеру, мы захотим сделать отдельную папку со страницами нашего приложения — Pages. И в нём появится некая StartPage.xaml страница, которая по плану будет стартовой. Просто меняем свойство NavigationPage из данной настройки и получаем искомое действие.

<DefaultTask  Name ="_default" NavigationPage="PagesStartPage.xaml"/>

Среди настроек этого файла есть также секция, которая содержит информацию о том, как будет выглядеть приложение в стартовом (Metro) меню телефона.

<TemplateType5>

<BackgroundImageURI IsRelative="true" IsResource="false">Background.png</BackgroundImageURI>
<Count>0</Count>
<Title>WP7HelloWorld</Title>
</TemplateType5>

BackgroundImageURI – путь к иконке (она также называется тайлом, tile) приложения, размером 173×173 пикселя. Title – заголовок вашего приложения на тайле. Count – представляет собой число, которое будет показываться сбоку вверху тайла. Наверняка те, кто хотя бы немножко пользовался айфоном, понимают о чём идёт речь. Это значение может варьироваться от 0 до 99 и может быть задано не только вручную этим файлом, а также, например, специальным механизмом платформы, который носит название Push Notifications. Но сейчас не об этом.

Не смотря на то, что почти все эти свойства можно легко задать прямо в свойствах самого проекта, эти знания являются ничуть не лишними, и порой (а даже и чаще всего) требуется редактировать именно этот файл напрямую, нежели лезть в настройки приложения.

Перейдём теперь к ещё одному важному файлу в структуре проекта – App.xaml. У него также ещё есть дочерний code-behind файл App.xaml.cs.

App.xaml является файлом-аналогом config’а приложения. Здесь можно хранить всё что угодно: начиная от стилей, цветов, кистей, шрифтов и т.д. до данных и настроек всего приложения. Также туда можно «положить» дополнительные объекты, созданные вами вручную (или импортированные откуда-либо), которые вы хотите использовать на различных страницах вашего приложения. Пример модифицированного App.xaml:

<Application 

x:Class="WP7HelloWorld.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"
xmlns:converters="clr-namespace:WP7HelloWorld.Converters">
<Application.Resources>
<converters:BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter"/>
<Style x:Key="ButtonStyle" TargetType="Button">
<Setter Property="Content" Value="My name is button" />
</Style>
</Application.Resources>
<Application.ApplicationLifetimeObjects>
<shell:PhoneApplicationService Launching="Application_Launching"
Closing="Application_Closing"
Activated="Application_Activated"
Deactivated="Application_Deactivated"/>
</Application.ApplicationLifetimeObjects>
</Application>

Корень файла – Application. Это своеобразная точка входа в приложение. Также здесь описаны пространства имён, которые используются для составления этого файла.

Секция Application.Resources представляет собой набор «ресурсов» приложения, тех самых объектов, которые мы хотим использовать где угодно в нашем приложении. В данном примере здесь содержится некий абстрактный конвертер булевского значения в значение типа Visibility для UIElement’ов, который мы создали и поместили в некую созданную нами папку Converters в корне приложения. Также здесь находится стиль для кнопки, который можно будет легко применить следующим образом:

<Button Style="{StaticResource ButtonStyle}" />

В секции Application.ApplicationLifetimeObjects у нас описан класс PhoneApplicationService, который обеспечивает доступ к основным событиям из жизненного цикла нашего приложения.

Теперь взглянем на App.xaml.cs.

Здесь мы можем увидеть такое свойство как RootFrame.

public PhoneApplicationFrame RootFrame { get; private set; }

В течение выполнения всего приложения, это свойство будет представлять собой корневой контейнер для каждой отдельной взятой страницы. У класса PhoneApplicationFrame есть свойство Content, которое и будет являться местом для помещения в него текущей страницы приложения. Осуществлять такие действия будет Navigation Framework.

Представьте ситуацию: в вашем приложении есть заголовок, который должен быть виден на протяжении всего запуска приложения. Этот заголовок можно определить в шаблоне (ControlTemplate) для PhoneApplicationFrame.

Рассмотрим основные события, которые описаны в файле:

Application_Launching – сюда помещается код, который должен выполниться, когда приложение запускается с нуля. Этот код не будет выполнен, если приложение возвращается из спящего состояния.

Application_Activated – сюда помещается код, который должен выполниться, когда приложение возвращается из спящего состояния. Этих состояний два вида – tombstone и dormant. Tombstone – более «глубокое» состояние сна. Приложение как бы замораживается, и нужно какое-то время, прежде чем оно восстановит своё исходное состояние. Dormant же просто переводит ваше приложение в фон, в пассивное состояние, и возврат в него происходит быстро. В данном обработчике есть параметр e типа ActivatedEventArgs, в котором доступно свойство IsApplicationInstancePreserved. Его значение true означает, что приложение вернулось из состояния dormant, иначе tombstone.

Application_Deactivated – сюда помещается код, который должен выполниться, когда приложение попадает в спящее состояние. Этот код не будет выполнен, если приложение полностью закрывается.

Application_Closing – сюда помещается код, который должен выполниться, когда приложение полностью закрывается. Этот код не будет выполнен, если приложение переходит в спящее состояние.

RootFrame_NavigationFailed – если переход между страницами не удался, то здесь вы сможете словить этот момент.

Application_UnhandledException – отлавливает любую непредвиденную ошибку вашего приложения.

Идём дальше по шаблону нашего проекта. В состав проекта входят три графических файла, о которых речь шла чуть выше. Это ApplicationIcon.png, Background.png и SplashScreenImage.jpg. Они представляют собой иконку проекта в списке приложений на телефоне, иконку проекта на стартовой странице меню телефона и заставку приложения соответственно. Первая всегда должна быть размером 62х62 пикселя, вторая 173х173 и третья 480х800. Их все можно заменять на свои собственные, называя также или же наделяя своими собственными именами. При этом не забудьте сменить пути к файлам в WMAppManifest.xml.

Ну и последний элемент стандартного шаблона приложения – стартовая страница MainPage.xaml. Под ней также находится соответствующий code-behind файл, в котором описывается вся логика страницы, её жизненный цикл и обработчики событий. Стартовую страницу также можно менять, о чём говорилось немного выше.

Вот и всё. Мы с вами посмотрели на структуру проекта Windows Phone 7 и изучили самый необходимый минимум, который должен знать каждый разработчик, чтобы чувствовать себя уютно и знать, что нужно для того, чтобы полностью управлять своим приложением.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *