Переход с Windows Phone Silverlight на UWP Move from Windows Phone Silverlight to UWP
Если вы — разработчик с приложением Windows Phone Silverlight, вы можете использовать свои навыки и исходный код при переходе на Windows 10. If you’re a developer with a Windows Phone Silverlight app, then you can make great use of your skill set and your source code in the move to Windows 10. В Windows 10 вы можете создать приложение UWP для Windows, включающее один пакет приложения, который покупатели могут установить на любое устройство. With Windows 10, you can create a Universal Windows Platform (UWP) app, which is a single app package that your customers can install onto every kind of device. Дополнительную информацию о Windows 10, приложениях UWP и концепциях адаптивного кода и интерфейса, о которых мы будем говорить в этом руководстве по переносу, см. в разделе Руководство по приложениям UWP. For more background on Windows 10, UWP apps, and the concepts of adaptive code and adaptive UI that we’ll mention in this porting guide, see the Guide to Universal Windows Platform (UWP) apps.
При переносе приложения Windows Phone Silverlight в приложение для Windows 10 вы сможете воспользоваться мобильными функциями, добавленными в Windows Phone 8.1. Вы сможете пойти еще дальше, чтобы использовать UWP, модель приложений и инфраструктура пользовательского интерфейса которой являются универсальными для всех устройств под управлением Windows 10. When you port your Windows Phone Silverlight app to a Windows 10 app, you’ll be able to catch up on the mobile features that were introduced in Windows Phone 8.1, and go far beyond them to use the Universal Windows Platform (UWP) whose app model and UI framework are universal across all Windows 10 devices. Это делает возможным поддержку компьютеров, планшетов, телефонов и многих других типов устройств из одной базы кодов и с помощью одного пакета приложения. That makes it possible to support PCs, tablets, phones, and a large number of other kinds of devices, from one code base and with one app package. И это умножает потенциальную аудиторию вашего приложения и создает новые возможности с общими данными, купленными товарами и т. д. And that will multiply your app’s potential audience and create new possibilities with shared data, purchased consumables, and so on. Подробнее о новых компонентах см. в разделе Новые возможности для разработчиков в Windows 10. For more info on new features, see What’s new for developers in Windows 10.
Если вы захотите, версия вашего приложения Windows Phone Silverlight и его версия в Windows 10 могут быть доступны для пользователей одновременно. If you choose to, the Windows Phone Silverlight version of your app and the Windows 10 version of it can both be available to customers at the same time.
Примечание . Это средство предназначено для помощи в ручном переносе приложения Windows Phone Silverlight на Windows 10. Note This guide is designed to help you port your Windows Phone Silverlight app to Windows 10 manually. Помимо использования сведений, изложенных в этом руководстве, по переносу приложения, можете попробовать воспользоваться предварительной версией для разработчиков моста Silverlight платформы Mobilize.NET , чтобы автоматизировать процесс переноса. In addition to using the information in this guide to port your app, you can try the developer preview of Mobilize.NET’s Silverlight Bridge to help automate the porting process. Это средство анализирует исходный код приложения и преобразует ссылки на элементы управления Windows Phone Silverlight и их API для аналогов UWP. This tool analyzes your app’s source code and converts references to Windows Phone Silverlight controls and APIs to their UWP counterparts. Поскольку это средство все еще находится на стадии предварительной версии для разработчиков, оно еще не обрабатывает все сценарии преобразования. Because this tool is still in developer preview, it does not yet handle all conversion scenarios. Однако большинству разработчиков удастся сэкономить немного времени и усилий, приступив к работе с использованием этого средства. However, most developers should be able to save some time and effort by starting with this tool. Чтобы испробовать эту предварительную версию для разработчиков, посетите веб-сайт Mobilize.NET. To try the developer preview, visit Mobilize.NET’s website.
XAML и .NET или HTML? XAML and .NET, or HTML?
Windows Phone Silverlight имеет платформу пользовательского интерфейса XAML на основе Silverlight 4,0, и Вы запрограммированы на версию .NET Framework и небольшое подмножество API-интерфейсов среда выполнения Windows. Windows Phone Silverlight has a XAML UI framework based on Silverlight 4.0, and you program against a version of the .NET Framework and a small subset of Windows Runtime APIs. Так как вы использовали язык XAML в приложении Windows Phone Silverlight, вероятно, вы выберете XAML для версии Windows 10, так как вы сможете использовать большую часть знаний и опыта. Это же касается большей части вашего исходного кода и используемых шаблонов программного обеспечения. Since you used Extensible Application Markup Language (XAML) in your Windows Phone Silverlight app, it’s likely that XAML will be your choice for your Windows 10 version because most of your knowledge and experience will transfer, as will much of your source code and the software patterns you use. Даже ваша разметка и дизайн пользовательского интерфейса с легкостью могут быть перенесены. Even your UI markup and design can port over readily. Вы увидите, что управляемые API, разметка XAML, инфраструктура пользовательского интерфейса и инструменты крайне знакомы, и вы можете использовать использовать C++, C# или Visual Basic наряду с XAML в приложении UWP. You will find the managed APIs, the XAML markup, the UI framework, and the tooling all reassuringly familiar, and you can use C++, C#, or Visual Basic along with XAML in a UWP app. Вы можете удивиться тому, насколько это относительно легкий процесс, даже если во время его реализации возникнет одна или две сложные задачи. You may be surprised at how relatively easy the process is, even if there is a challenge or two along the way.
Примечание . Windows 10 поддерживает гораздо больше .NET Framework чем приложение для Магазина Windows Phone. Note Windows 10 supports much more of the .NET Framework than a Windows Phone Store app does. Например, в Windows 10 имеется несколько System. ServiceModel. * пространства имен, а также System.Net, System .NET. NetworkInformation и System .NET. Sockets. For example, Windows 10 has several System.ServiceModel.* namespaces as well as System.Net, System.Net.NetworkInformation, and System.Net.Sockets. Таким образом, теперь самое время перенести Windows Phone Silverlight и просто скомпилировать код .NET и работать на новой платформе. So, now is a great time to port your Windows Phone Silverlight and have your .NET code just compile and work on the new platform. См. раздел Сопоставление пространства имен и класса. See Namespace and class mappings. Еще одна причина перекомпилировать существующий исходный код .NET в приложение для Windows 10 состоит в том, что вы сможете максимально воспользоваться .NET Native. Это передовая технология компиляции, которая преобразует язык MSIL во встроенный готовый к запуску машинный код. Another great reason to recompile your existing .NET source code into a Windows 10 app is that you will benefit from .NET Native, which an ahead-of-time compilation technology that converts MSIL into natively-runnable machine code. Приложения .NET Native запускаются быстрее, используют меньше памяти и меньше заряда батареи, чем аналоги MSIL. .NET Native apps start faster, use less memory, and use less battery than their MSIL counterparts.
В этом руководств по переносу основное внимание уделяется XAML, но, Кроме того, можно создать функционально эквивалентное приложение — вызов многих из одних и тех же среда выполнения Windows API — с помощью JavaScript, каскадные таблицы стилей (CSS) и HTML5 вместе с библиотекой Windows для JavaScript. This porting guide will focus on XAML but, alternatively, you can build a functionally equivalent app—calling many of the same Windows Runtime APIs—using JavaScript, Cascading Style Sheets (CSS), and HTML5 along with the Windows Library for JavaScript. Хотя инфраструктуры пользовательского интерфейса XAML среды выполнения Windows и HTML отличаются друг от друга, какую бы вы ни выбрали, она будет работать повсеместно на всем диапазоне устройств Windows. Although the Windows Runtime UI frameworks of XAML and HTML are different from one another, whichever one you choose will work universally across the full range of Windows devices.
Нацеливание семейства универсальных или мобильных устройств Targeting the universal or the mobile device family
Один из доступных вариантов — это перенос приложения в приложение, которое будет ориентировано на семейство универсальных устройств. One option you have is to port your app to an app that targets the universal device family. В этом случае приложение можно установить на самый широкий спектр устройств. In this case, the app can be installed onto the widest range of devices. Если ваше приложение будет вызывать API, реализуемые только на мобильных устройствах, вы сможете обрабатывать эти вызовы с помощью адаптивного кода. If your app calls APIs that are implemented only in the mobile device family, then you can guard those calls with adaptive code. Кроме того, вы можете выбрать перенос приложения в приложение, которое будет ориентировано на семейство мобильных устройств. В этом случае вам не нужно создавать адаптивный код. Alternatively, you can choose to port your app to an app that targets the mobile device family in which case you don’t need to write adaptive code.
Адаптация приложения для нескольких форм-факторов Adapting your app to multiple form factors
Вариант, выбранный вами в предыдущем разделе, определит спектр устройств, на которых будет работать ваше приложение, и этот спектр может быть очень широк. The option you choose from the previous section will determine the range of devices that your app or apps will run on, and that may well be a very wide range of devices. Даже если вы ограничитесь поддержкой мобильных устройств, вам по-прежнему придется иметь дело с широким диапазоном размеров экрана. Even limiting your app to the mobile device family still leaves you with a wide range of screen sizes to support. Поэтому если приложение будет работать на устройствах тех форм-факторов, которые оно раньше не поддерживало, протестируйте на них пользовательский интерфейс и внесите необходимые изменения, чтобы последний мог адаптироваться к каждому из форм-факторов соответствующим образом. So, since your app will be running on form factors that it didn’t formerly support, test your UI on those form factors and make any change necessary so that your UI adapts appropriately on each. Это можно представить как задачу после переноса. Ряд практических примеров представлен в примере описания приложений Bookstore2. You can think of this is a post-porting task, or a porting stretch-goal, and there is an example of it in practice in the Bookstore2 case study.
Поуровневый перенос Approaching porting layer-by-layer
- Представление. View. Представление (вместе с моделью представления) составляет пользовательский интерфейс вашего приложения. The view (together with the view model) makes up your app’s UI. В идеале представление состоит из разметки, привязанной к наблюдаемым свойствам модели представления. Ideally, the view consists of markup bound to observable properties of a view model. Другой шаблон (общий и удобный, но только в краткосрочной перспективе) предназначен для императивного кода в файле кода программной части для непосредственного управления элементами пользовательского интерфейса. Another pattern (common and convenient, but only in the short term) is for imperative code in a code-behind file to directly manipulate UI elements. В любом случае, большую часть вашей разметки, оформления пользовательского интерфейса и даже императивного кода, который управляет элементами пользовательского интерфейса, будет легко перенести. In either case, much of your UI markup and design—and even imperative code that manipulates UI elements—will be straightforward to port.
- Модели представления и модели данных. View models and data models. Даже если вы формально не используете шаблоны разделения задач (типа MVVM), в вашем приложении неизбежно присутствует код, который выполняет функцию модели представления и модели данных. Even if you don’t formally embrace separation-of-concerns patterns (such as MVVM), there is inevitably code present in your app that performs the function of view model and data model. Код модели представления использует типы в пространствах имен инфраструктуры пользовательского интерфейса. View model code makes use of types in the UI framework namespaces. Код модели представления и код модели данных также используют операционную систему без визуального представления и API .NET (включая API для доступа к данным). Both view model and data model code also use non-visual operating system and .NET APIs (including APIs for data-access). И подавляющее их большинство доступно для приложения UWP, поэтому вы можете рассчитывать на то, что большая часть этого кода может быть перенесена без изменений. And the vast majority of those are available to a UWP app, so you can expect to be able to port much of this code without change. Однако помните: модель представления является моделью или абстракцией представления. Remember, though: a view model is a model, or abstraction, of a view. Модель представления предоставляет состояние и поведение пользовательского интерфейса, а само представление предоставляет визуальные элементы. A view model provides the state and behavior of UI, while the view itself provides the visuals. По этой причине любой пользовательский интерфейс, который вы адаптируете к различным устройствам, на которых UWP позволяет его запускать, скорее всего потребует соответствующего изменения модели представления. For this reason, any UI you adapt to the different form factors that the UWP allows you to run on will likely need corresponding view model changes. Для работы с сетью и вызова облачных служб, как правило, существует возможность использования .NET или среда выполнения Windows API. For networking and calling cloud services, you typically have the option between using .NET or Windows Runtime APIs. Факторы, влияющие на принятие решения, описаны в разделе Облачные службы, сеть и базы данных. For the factors involved in making that decision, see Cloud services, networking, and databases.
- Облачные службы. Cloud services. Вполне возможно, что некоторая часть вашего приложения (а может и большая его часть) выполняется в облаке в форме служб. It’s likely that some of your app (perhaps a great deal of it) runs in the cloud in the form of services. Часть приложения, запущенная на клиентском устройстве, подключается к ним. The part of the app running on the client device connects to those. Это часть распределенного приложения, скорее всего, останется неизменной при переносе клиентской части. This is the part of a distributed app most likely to remain unchanged when porting the client part. Если у вас ее еще нет, удобным вариантом облачных служб для вашего приложения UWP являются Мобильные службы Microsoft Azure, предоставляющие мощные серверные компоненты, которые ваши универсальные приложения для Windows могут вызывать для служб, начиная с простых уведомлений для обновления живых плиток и до требующего больших усилий масштабирования, которое может предоставить ферма серверов. If you don’t already have one, a good cloud services option for your UWP app is Microsoft Azure Mobile Services, which provides powerful back-end components that Universal Windows apps can call for services ranging from simple notifications for live tiles updates up to the kind of heavy-lifting scalability a server farm can provide.
Перед переносом или в процессе переноса подумайте, можно ли улучшить ваше приложение с помощью оптимизации таким образом, чтобы код с похожей целью собирался вместе в уровни, а не был разбросан произвольно. Before or during the porting, consider whether your app could be improved by refactoring it so that code with a similar purpose is gathered together in layers and not scattered arbitrarily. Разложение вашего приложения UWP по уровням, как описано выше, поможет вам сделать приложение более правильным, проверить его, а затем читать и поддерживать его. Factoring your UWP app into layers like those described above makes it easier for you to make your app correct, to test it, and then subsequently to read and maintain it. Вы можете сделать возможности более доступными для многократного использования и избежать некоторых проблем различий в API пользовательского интерфейса между платформами, используя шаблон Model-View-ViewModel (MVVM). You can make functionality more reusable—and avoid some issues of UI API differences between platforms—by following the Model-View-ViewModel (MVVM) pattern. Этот шаблон хранит части данных, пользовательского интерфейса и бизнес-части вашего приложения отдельно друг от друга. This pattern keeps the data, business, and UI parts of your app separate from one another. Даже в пользовательском интерфейсе он может хранить состояние и поведение отдельно друг от друга, и отдельно визуальные и доступные для тестирования элементы. Even within the UI it can keep state and behavior separate, and separately testable, from the visuals. Благодаря MVVM, однажды определив логику данных и бизнес-логику, вы сможете использовать ее на всех устройствах вне зависимости от пользовательского интерфейса. With MVVM, you can write your data and business logic once and use it on all devices no matter the UI. Вероятно, вы сможете также в значительной степени использовать ту же самую модель представления и его части на различных устройствах. It’s likely that you’ll be able to re-use much of the view model and view parts across devices, too.
Одно или два исключения из правила One or two exceptions to the rule
По мере чтения этого руководства по переносу вы можете обратиться к разделу Сопоставление пространства имен и класса. As you read this porting guide, you can refer to Namespace and class mappings. Довольно простое сопоставление является общим правилом, а в таблице сопоставлений пространства имен и классов описываются все исключения. Fairly straightforward mapping is the general rule, and the namespace and class mappings table describes any exceptions.
На уровне функций, к счастью, есть очень мало вещей, которые не поддерживаются в UWP. At the feature level, the good news is that there’s very little that’s not supported in the UWP. Большая часть ваших навыков и исходного кода применимы к приложениям UWP, о чем вы узнаете из этого руководства. Most of your skill set and source code translates very well over to UWP apps, as you’ll read in the rest of this porting guide. Однако существует несколько функций Windows Phone Silverlight, которые вы могли использовать, и для которых нет эквивалента UWP. But, here are the few Windows Phone Silverlight features that you may have used for which there is no UWP equivalent.
Функция, для которой нет эквивалента UWP Feature for which there is no UWP equivalent | Документация Windows Phone Silverlight по функции Windows Phone Silverlight documentation for the feature |
---|---|
Microsoft XNA. Microsoft XNA. В общем его заменой является Microsoft DirectX, использующий C++. In general, Microsoft DirectX using C++ is the replacement. См. разделы Разработка игр и Взаимодействие DirectX и XAML. See Developing games and DirectX and XAML interop. | Библиотека классов XNA Framework XNA Framework Class Library |
Приложения-объективы Lens apps | Объективы для Windows Phone 8 Lenses for Windows Phone 8 |
Раздел Topic | Описание Description |
---|---|
Сопоставление пространства имен и класса Namespace and class mappings | В этом разделе подробно описывается сопоставление API Windows Phone Silverlight с их аналогами в UWP. This topic provides a comprehensive mapping of Windows Phone Silverlight APIs to their UWP equivalents. |
Перенос проекта Porting the project | Начните процесс переноса с создания нового проекта Windows 10 в Visual Studio и скопируйте в него свои файлы. You begin the porting process by creating a new Windows 10 project in Visual Studio and copying your files into it. |
Устранение неполадок Troubleshooting | Мы настоятельно рекомендуем прочитать до конца это руководство по переносу, но мы также понимаем, что вы жаждете двигаться вперед и добраться до этапа, на котором выполняется построение и запуск вашего проекта. We highly recommend reading to the end of this porting guide, but we also understand that you’re eager to forge ahead and get to the stage where your project builds and runs. До этого момента вы можете достичь временного прогресса с помощью комментирования и создания заглушек для любого ненужного кода, а затем вернуться, чтобы уплатить этот долг позже. To that end, you can make temporary progress by commenting or stubbing out any non-essential code, and then returning to pay off that debt later. Таблица симптомов и средств устранения неполадок в этом разделе может быть полезна на этом этапе, хотя она не является заменой прочтению следующих нескольких разделов. The table of troubleshooting symptoms and remedies in this topic may be helpful to you at this stage, although it’s not a substitute for reading the next few topics. Вы всегда можете обратиться к таблице по мере продвижения по последующим разделам. You can always refer back to the table as you progress through the later topics. |
Перенос XAML и пользовательского интерфейса Porting XAML and UI | Практика определения пользовательского интерфейса в форме декларативной разметки XAML очень хорошо преобразуется из приложений Windows Phone Silverlight в приложения UWP. The practice of defining UI in the form of declarative XAML markup translates extremely well from Windows Phone Silverlight to UWP apps. Вы увидите, что после обновления ключевых ссылок на системный ресурс, изменения некоторых имен типов элементов и изменения clr-namespace на using большие участки вашей разметки стали совместимы. You’ll find that large sections of your markup are compatible once you’ve updated system Resource key references, changed some element type names, and changed «clr-namespace» to «using». |
Перенос для ввода-вывода, устройств и моделей приложений Porting for I/O, device, and app model | Код, интегрирующийся с устройством и его датчиками, включает ввод от пользователя и вывод к нему. Code that integrates with the device itself and its sensors involves input from, and output to, the user. Он может также включать обработку данных. It can also involve processing data. Но в целом этот код не считается уровнем пользовательского интерфейса или уровнем данных. But, this code is not generally thought of as either the UI layer or the data layer. Этот код включает интеграцию с контроллером вибрации, акселерометром, гироскопом, микрофоном и динамиками (которые могут пересекаться с распознаванием речи и синтезом), (географическим) положением и модальностями ввода, такими как сенсорный ввод, мышь, клавиатура и перо. This code includes integration with the vibration controller, accelerometer, gyroscope, microphone and speaker (which intersect with speech recognition and synthesis), (geo)location, and input modalities such as touch, mouse, keyboard, and pen. |
Перенос уровней бизнеса и данных Porting business and data layers | За вашим пользовательским интерфейсом расположены уровни бизнеса и данных. Behind your UI are your business and data layers. Код в этих уровнях вызывает операционную систему и API .NET Framework (например, фоновую обработку, местонахождение, камеру, файловую систему, сети и другой доступ к данным). The code in these layers calls operating system and .NET Framework APIs (for example, background processing, location, the camera, the file system, network, and other data access). Подавляющее их большинство доступно для приложения UWP, поэтому вы можете рассчитывать на то, что большая часть этого кода может быть перенесена без изменений. The vast majority of those are available to a UWP app, so you can expect to be able to port much of this code without change. |
Перенос для форм-фактора и взаимодействия с пользователем Porting for form factor and UX | В приложениях для Windows используется общий вид и стиль на всех компьютерах, мобильных устройствах и множестве других устройств. Windows apps share a common look-and-feel across PCs, mobile devices, and many other kinds of devices. Пользовательский интерфейс, ввод и шаблоны взаимодействия очень похожи, и пользователь, использующий приложения на разных устройствах, оценит это. The user interface, input, and interaction patterns are very similar, and a user moving between devices will welcome the familiar experience. |
Пример: Bookstore1 Case study: Bookstore1 | Этот раздел представляет практический пример переноса очень простого приложения Windows Phone Silverlight в приложение Windows 10 UWP. This topic presents a case study of porting a very simple Windows Phone Silverlight app to a Windows 10 UWP app. На Windows 10 можно создавать единый пакет приложения, который покупатели могут установить на широкий спектр устройств. Именно этим мы и займемся в этом примере. With Windows 10, you can create a single app package that your customers can install onto a wide range of devices, and that’s what we’ll do in this case study. |
Пример: Bookstore2 Case study: Bookstore2 | Этот пример, в котором используются данные из примера Bookstore1, начинается с приложения Windows Phone Silverlight, отображающего сгруппированные данные в классе LongListSelector. This case study—which builds on the info given in Bookstore1—begins with a Windows Phone Silverlight app that displays grouped data in a LongListSelector. В модели представления каждый экземпляр класса Author представляет группу книг одного автора, а в классе LongListSelector мы можем просмотреть список книг, сгруппированных по автору, или уменьшить представление, чтобы просмотреть список переходов по авторам. In the view model, each instance of the class Author represents the group of the books written by that author, and in the LongListSelector, we can either view the list of books grouped by author or we can zoom out to see a jump list of authors. |
Связанные темы Related topics
Документация Documentation
Статьи в журналах Magazine articles
Презентации Presentations