Windows/Phone 8.1–разработка для обоих. Часть 3

Эта статья является продолжением из предыдущей. Перед прочтением данной рекомендую пересмотреть предыдущие из данной серии.

Создадим новое универсальное приложение

Visual Studio уже поддерживает универсальные проекты. Они предназначены не только для. NET приложений, вы также можете создавать их на других платформах (например HTML / JS);

clip_image002

Вы также можете заметить, что можно создать как универсальную портативную библиотеку классов так и runtime component.

Структура проекта

Что мы увидим, когда создадим такой проект?

clip_image004

На скриншоте выше отображена структура приложения для Windows, Windows Phone и общего проекта.

В ОС Windows/Phone приложения есть вещи, которые вы возможно ожидали, учитывая предыдущие дискуссии вокруг «одно приложение для всех». Использование Windows 8.1 приложения в качестве примера:

clip_image006

У приложения Windows 8.1 есть:

  1. Собственный файл MainPage.xaml и MainPage.xaml.cs.
  2. Собственный манифест приложения.
  3. Собственные активы для различных логотипов и т.п.
  4. Набор ссылок:
  •                 . NET для Windows Store приложений
  •                 Windows 8.1 (т.е. WinRT)
  •                 Общий проект.

В Windows Phone 8.1 приложении то же самое:

clip_image008

Есть несколько различных логотипов, с учетом масштабирования.

Имеется ссылка на «Windows Phone 8.1» (WinRT), а не «Windows 8.1».

Что нового в проекте shared

Логика общей папки очень похожа на подход с линковаными  (ссылочными, связанными) файлами в Visual Studio.

Во-первых, общая папка появляется на диске в таком виде;

clip_image010

Это настоящая папка, а не только часть концепции внутри Visual Studio. Таким образом, элементы внутри этой папки, по сути, строятся дважды — один раз в рамках проекта для Windows 8.1 и другой — в контексте проекта Windows Phone 8.1.

Это означает, что если вы собираетесь работать в shared проекте, вы должны учитывать тот факт, что данный код должен одинаково хорошо работать одновременно на обоих платформах.

Класс App

По-умолчанию данный класс находится в shared проекте в Visual Studio. В нем по сути ничего нет, взглянем:

clip_image012

хотя я думаю, довольно сказать, что мы используем один и тот же базовый класс приложений и тот же вариант XAML для Windows/Phone 8.1.

Однако, взглянув на файл кода программной части мы увидим немного больше, чем в XAML. Вот небольшой отрывок:

clip_image014

Например, здесь есть условная компиляция некоторых элементов для WINDOWS_PHONE_APP, которые не работают в Windows 8.1. Очевидно, т.к. файл компилируется в два раза.

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

clip_image016

а теперь переключим в режим Windows Phone

clip_image018

IntelliSense также фильтруется с помощью этой панели навигации. В качестве примера, есть класс в Windows Phone 8.1, который называется ContentDialog и не является частью ОС Windows 8.1. Если я использую этот класс в контексте  Windows Phone 8.1, то все хорошо, хотя IntelliSense предупреждает меня о наличии

clip_image020

И вот что мы увидим, если переключимся в режим Windows 8.1:

clip_image022

Простенький пример

Давайте предположим, что я хочу создать простой пример приложения с TextBlock и Button и кнопкой запуска браузера.

Начнем с ресурсов:

clip_image024

И вы заметите, что формат файла ресурсов, который я использую здесь Resources.resw, что является форматом ресурсов Windows 8.1.

Затем определим немного «UI» на Phone в файле MainPage.xaml. Например;

clip_image026

clip_image028

И напишем немного кода для обработки нажатия:

clip_image030

И это работает просто отлично!

Когда дело доходит до части Windows 8.1, то я понимаю, что можно просто использовать точно такой же интерфейс, так почему бы не скопировать MainPage.xaml и MainPage.xaml.cs в общую папку?

clip_image032

Как и следовало ожидать, при компиляции я получаю список ошибок

clip_image034

какие кажутся справедливыми. Чтобы исправить, я могу просто удалить файлы MainPage.xaml/MainPage.xaml.cs из Windows/Phone проектов, оставив единственный экземпляр в общей папке.

Это работает отлично!

Что же касается Portable Class Library?

Вместо того, чтобы держать код в папке общего доступа, я могу положить его в PCL, как мы делали это раньше при шаринге кода между WinRT и WP.

Если я добавить новую библиотеку класса в мой проект:

clip_image036

После я могу написать некоторый класс, который делает вызов класса Launcher:

using System;  
using System.Threading.Tasks;  
using Windows.System;  
namespace CrossPlatform  
{  
   publicstaticclass Class1  
   { 
      publicstatic async Task Launch()  
      {  
          await Launcher.LaunchUriAsync(new Uri("http://www.microsoft.com"));  
      }   
   }  
 }

«Интересным» является то, что эту портативную библиотеку классов я не могу добавить ссылкой в мой общий проект (shared).

Вместо этого я добавить ссылки к обеим проектам отдельно;

clip_image038

И уже после этого я могу писать в общих классах код, ссылаясь на PCL.

clip_image040

что является само собой немного непривычным для первого раза

 

В итоге

Visual Studio 2013 с обновлениями позволяет создавать «универсальный» проект, который содержит два проекта — один для каждого Windows/Phone наряду с общей папкой, которая будет построена два раза — один раз в контекст приложения для Windows и снова в контексте Phone.

Все срабатывает на отлично и сама среда прекрасно понимает эту идею и показывает вам правильный IntelliSense и дизайнер при редактировании общих файлов (в зависимости от платформы, в которой вы работаете на данный момент).

 

Ссылка на источник: Windows/Phone 8.1 – Building for Both, Part 3

 


Реклама
Tagged with: , , , , , , ,
Опубликовано в Development, Windows 8.1

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

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход /  Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход /  Изменить )

Connecting to %s

%d такие блоггеры, как: