如何将Windows Phone应用移植到Windows 8平台

译文
移动开发
相对而言,使用C++、C#或Visual Basic将Microsoft Silverlight应用从Windows Phone移植至Metro风格应用是非常容易的,本文主要关注的是Windows Phone应用的移植。

【51CTO译文】相对而言,使用 C++、C# 或 Visual Basic将 Microsoft Silverlight 应用从 Windows Phone 移植至 Metro风格应用是非常容易的。大部分的工作内容,所需的知识以及体验,将转向使用 XAML 的 Metro风格应用的模型,许多 XAML 界面设计与布局也是如此。

应用移植工作主要包含两部分:

◆修改 UI,利用Windows Metro 风格 UI 的功能与设计指南;

◆从代码隐藏文件中调用的Silverlight API 转向相应的 Windows Runtime API。

很多情况下,代码保持不变,或几乎不变。虽然存在一些差别,但 Windows Runtime 中基于 XAML 的 UP API 是在 Windows Phone 版本的 Silverlight 上进行建模。另外,可使用 Metro 风格的 .NET API,这是完整的 .NET Framework 的子集,与.NET Framework for Silverlight 类似。在某些情况下,类似的.NET API已转移到Windows Runtime,只是设计有稍许不同。

成功移植应用所需的工作量主要取决于:应用是否使用了大量 API,而这些 API 并未包含在 Metro 风格应用的 Windows Runtime 和 .NET API。本文提供了一些常规的移植指南与资源,用于定位 API 并确定多少代码必须进行替换。

本文主要关注的是 Windows Phone 应用的移植,不过,对于任何 .NET 和基于XAML 的项目,可在以下主题中找到有用的相关信息:

将Silverlight 或 WPF XAML/代码移植到Metro风格应用

Metro风格应用.NET概述

Windows Phone 7应用移植准备工作

在进行 Windows Phone 7 应用移植之前,请考虑以下相关事项:

◆是否需要对应用进行快速移植或获得更佳的可维护性?“提高可维护性”部分提供了一些技巧,可用于对项目进行单源处理,并且有助于针对不同平台的项目间代码再利用。

◆Windows Phone 7 设备分辨率在水平模式在为水平模式下为800x480 (WVGA),垂直模式下为480x800。Windows 8 Release Preview 设备可具有多种长宽比,多种可能的水平与垂直分辨率。界面与资产如何进行扩展?相关信息

◆Windows Phone 7 界面为触摸式的。Windows 8 界面也应支持触摸,同时还需支持其他输入方式,如鼠标和键盘。对于某些未使用触摸的用户,你的界面是否感觉很笨拙?无论何种输入方式,如何保持应用的可用性?相关信息,请参阅“可访问性计划”。

◆Windows Phone 7 应用中是否具有手机专业的功能?想法了解Windows Runtime 中相对应的网络技术?如果对手机或提供商提供更多功能支持,那么可能需对其进行重新开发,提供更多的网络或提供商独立性。

◆游戏应用是否依赖用于图形渲染的 Microsoft XNA 组件?如果是,对于 Windows 8 应用无法使用 XNA。另外,对于托管代码,无法有效地使用 DirectX;如果未使用第三发托管 API,那么必须使用 C++ 进行 DirectX 游戏开发。有关更多信息,请参阅“创建DirectX游戏”。

常规移植过程

如果为了优化上市时间,需快速移植应用,请遵循以下步骤:

1.打开 Microsoft Visual Studio Express 2012 RC for Windows 8,使用C++、C# 或 Visual Basic 新建 Metro 风格应用。选择应用布局与功能最为匹配的项目模板。有关更多信息,请参阅“使用模板(C++、C#、Visual Basic)快速创建 Metro 风格应用”。

2.复制想要在新项目中再利用的文件夹、代码与资产文件。

3.在 Visual Studio 的“解决方案浏览器”(Solution Explorer),单击“显示所有文件”(Show All Files)。

4.选择已复制的文件与文件夹,然后右键单击并选择“包含在项目中”(Include In Project)。

5.执行全局搜索与替换,将“System.Windows”替换为“Windows.UI.Xaml”。

6.将原始 XAML 代码中可重用部分复制到新项目的 XAML 文件,或新建的 XAML 文件(如需要)。通常,页面布局根(典型的示例:Grid 元素)可进行复制并重用,而最外层元素(如 PhoneApplicationPage 元素)并非如此。

7.构建项目,生成错误,然后这些错误找到需进行更新或替换的代码。有时,所需的这种更新非常少,只是对参数类型进行更改。但有些更新需要使用 Metro style 所用的 Windows Runtime API 替代 .NET API。为了确认支持哪些 API,可使用本文与“Metro 风格应用 .NET 概述”以及“将 Silverlight 或 WPF XAML/代码移植到 Metro 风格应用”,获取相关指南。

8.对于任何无法轻易进行更新的代码,请进行评注或清除,直到项目构建。

9.一次对评注代码的一个问题进行更新或替换,直到移植完成。

#p#

提高可维护性

为了多个平台上的应用维护变得更加容易,请考虑使用以下技巧:

◆在移植之前,请对代码进行重构,使其尽可能可重用。尤其,通过应用设计模式,如将业务逻辑与 UI 逻辑分开的Model-View-ViewModel (MVVM),可避免 UI API 差异方面的问题。使用 MVVM,模型与视图模型代码在不同平台上可保持大部分不变,同时视图代码(XAML)可根据平台定制。

◆在项目之间共享可重用代码文件,而不是维护针对不同平台的多个副本。如需在 Visual Studio 中进行此类操作,请“解决方案浏览器”(Solution Explorer)中右键单击该项目,选择“添加已有项”(Add Existing Item),选择共享文件,然后单击“添加为链接”(Add As Link)。

◆如需在共享文件中包含某些平台专用代码,请使用条件编译。这种方式仅适用于 C#、C++ 和 Visual Basic 代码。对于 XAML,必须对分开的代码文件进行分别维护。

◆使用 Portable Class Library 创建跨平台的库程序集。该可移植类库包含 .NET Framework for Silverlight、Metro 风格应用 .NET API 和完整的 .NET Framework 中可用 .NET API 的子集。可移植类库是与全部三个平台兼容的二进制文件,因此对于代码重用是最为简单的方式。不过,为了创建针对可移植类库的项目,必须使用 Microsoft Visual Studio Professional 2012 RC 或更高版本。

#p#

移植用户界面

Silverlight 的大多数布局类型,如CanvasGridStackPanel,在 Windows Runtime XAML 命名空间里也会出现。虽然为了适应多种高于 800x480 的分辨率,Grid 和布局设置需要进行调整,但基本用户界面结构的移植应是直接式的。

当然,手机 UI 可能专门为小屏幕手机而设计。简单地对其继续扩展并非最佳设计,应根据 Metro 风格应用的功能以及 Windows 8 设备的多种形状因素对 UI 进行重构。这种功能之一为分屏视图(snapped view),对此手机 UI 设计可能是有用的。

更多信息与设计指南,请参阅以下主题:

制作优秀的 Metro 风格应用

多种形状因素计划

支持多种视图

用户体验设计

用户界面指南

使用设计清单

对定义应用布局的 XAML 文件进行调整之后,需要更新隐藏代码,以使用 Windows Runtime API 替代 Silverlight API。对于用户界面元素,在两个 API 库之间存在相当一致的映射。

以下为 Windows Runtime XAML 命名空间,大体上与对应的 Silverlight 用户界面命名空间等同。

Silverlight XAML 命名空间 Windows Runtime XAML 命名空间
System.Windows Windows.UI.Xaml
System.Windows.Automation Windows.UI.Xaml.Automation
System.Windows.Automation.Peers Windows.UI.Xaml.Automation.Peers
System.Windows.Automation.Provider Windows.UI.Xaml.Automation.Provider
System.Windows.Automation.Text Windows.UI.Xaml.Automation.Text
System.Windows.Controls Windows.UI.Xaml.Controls
System.Windows.Controls.Primitives Windows.UI.Xaml.Controls.Primitives
System.Windows.Data Windows.UI.Xaml.Data
System.Windows.Documents Windows.UI.Xaml.Documents
System.Windows.Input Windows.UI.Xaml.Input
System.Windows.Interop Windows.UI.Xaml.Interop
System.Windows.Markup Windows.UI.Xaml.Markup
System.Windows.Media Windows.UI.Xaml.Media
System.Windows.Media.Animation Windows.UI.Xaml.Media.Animation
System.Windows.Media.Imaging Windows.UI.Xaml.Media.Imaging
System.Windows.Media.Media3D Windows.UI.Xaml.Media.Media3D
System.Windows.Navigation Windows.UI.Xaml.Navigation
System.Windows.Printing Windows.UI.Xaml.Printing
System.Windows.Resources Windows.UI.Xaml.Resources
System.Windows.Shapes Windows.UI.Xaml.Shapes

请注意,以下 Silverlight XAML 命名空间在 Windows Runtime 中不具有直接的对等项:

◆System.Windows.Ink

◆System.Windows.Media.Effects

◆System.Windows.Messaging

#p#

使用 XAML 的Silverlight 与 Metro 应用之间的不同

虽然对于 Windows Phone 7 和 Windows 8,Metro 风格 UI 是相同的,但在两个平台的 UI 的功能之间还存在一些差异。以下部分对其中一些关键的不同进行了描述。不过,为了确定具体支持哪些功能,应查询 API 引用。更多关于使用 XAML 的 Metro 风格应用信息,请参阅“采用 C# 或 Visual Basic 的 Metro 风格应用的路线图”。

控件与布局

Windows Runtime 中的 XAML 控件是基于 Silverlight 控件的,但可能存在一些差异或缺少某些功能。例如:

Windows Runtime 未包含 Silverlight for Windows Phone 中提供的 Pivot 和 Panorama 控件。这些控件专门为手机形状因素而设计,有助于提升比手机屏更大屏幕上的用户体验。Metro 风格应用通常具有更大的屏幕空间,并且应利用具有更大灵活性的 Grid 控件的优势。另外,还可以使用 FlipView 控件来提供简洁的翻页体验。

Windows Runtime 中的 AppBar 控件提供的体验与手机 ApplicationBar 类似,不过具有更多的灵活性,支持定制布局与数据绑定。

Windows Phone 可声明支持何种设备旋转方式,因此能够对必需的布局灵活性进行限制。对于 Metro 风格应用,UI 设计应不受设备选择方式与屏幕尺寸的限制。

更多关于控件的信息,请参阅“功能控件”。

磁贴与通知

Metro 风格应用的磁贴与 Windows Phone 7 的动态磁贴(Live Tile)类似,不过还存在一些差异。更多有关使用 C++、C# 或 Visual Basic 的 Metro 风格应用中的磁贴使用,请参阅创建磁贴

通知是 Windows Phone 7 中推送通知模型的扩展。更多 Metro 风格应用中通知使用的详细信息,请参阅发送消息条通知

在使用C++、C# 或 Visual Basic 的 Metro 风格应用中使用磁贴、消息条和通知的更多信息与教程,请参阅使用磁贴、徽章和消息条通知

数据应用场景

Metro 风格应用目前不包含对数据密集型应用场景(如业务线)的内置支持。例如,没有用于客户端 SQL 的 API 并且没有本地数据库。但是,利用定制服务与 OData 调用,仍然可从网络对数据进行检索,并且利用客户端 LINQ 可对数据进行形状与格式化处理,同时可利用基于 XAML 控件可进行绑定。

数据绑定大部分保持不变。例如,可部署 INotifyPropertyChanged 和 INotifyCollection,可相应地接收更改通知与更新 UI。但是,Metro 风格应用的数据相关功能当前还存在以下限制:

◆对数据项验证和 IDataErrorInfo 和 INotifyDataErrorInfo 接口,未提供内置支持。

◆Binding 类未包含 Silverlight 中可用的扩展格式化属性。但是,仍可部署 IValueConverter 已提供定制格式化。

◆IValueConverter 方法将语言字符串作为参数而不是 CultureInfo 对象。

◆CollectionViewSource 类未对于工作的排序、过滤和分组分别提供内置支持。更多信息,请参阅“使用 XAML 进行数据绑定”和“数据绑定示例”。

导航

为了与平台进行集成以及利用硬件“后退”按键,Silverlight for Windows Phone 应用需要使用基于页面的导航结构。对于 Metro 风格应用,提供了类似的导航架构,但是由于平台的要求不同,存在一些差异:

◆在 Metro 风格应用中导航至某个页面时,并未使用 URI 寻址方案,而是指定目标页面的类型,在该页面 XAML 定义的x:Class属性中显示。另外,还可以选择性地传递参数对象。

◆Metro 风格应用的导航框架不支持框架导航、日记(Back 堆栈)修订和 URI 映射。

更多信息,请参阅快速入门:页面间导航

#p#

将 Windows Phone 7 API 映射至 Windows Runtime API

下表提供 Windows Phone 7 专用 API 与 Windows Runtime API 之间的粗略映射。该表不表示一对一的功能映射;任何平台提供的功能与对应平台都或多或少存在一些差异。

API 类型 Silverlight API 命名空间 Windows Runtime API 命名空间
设备 Microsoft.Devices,
Microsoft.Devices.Radio, Microsoft.Devices.Sensors
Windows.Devices.Enumeration, Windows.Devices.Enumeration.Pnp, Windows.Devices.Input, Windows.Devices.Sensors
Windows Phone 应用模型与环境 Microsoft.Phone, Microsoft.Phone.Info, Microsoft.Phone.Notification, Microsoft.Phone.Reactive,
Microsoft.Phone.Shell,
Microsoft.Phone.Tasks
Windows.Networking.PushNotifications, Windows.Devices.Sms, Windows.ApplicationModel.Background, Windows.ApplicationModel.Contacts, Windows.ApplicationModel.Contacts.Provider, Windows.ApplicationModel.Core
映射 Microsoft.Phone.Controls.Maps, Microsoft.Phone.Controls.Maps.AutomationPeers, Microsoft.Phone.Controls.Maps.Core Microsoft.Phone.Controls.Maps.Design Microsoft.Phone.Controls.Maps.Overlays, Microsoft.Phone.Controls.Maps.Platform Windows.Devices.Geolocation
商城 Microsoft.Phone.Marketplace Windows.ApplicationModel.Store
网络与联合 Microsoft.Phone.Net, Microsoft.Phone.Net.NetworkInformation Windows.Networking, Windows.Networking.BackgroundTransfer, Windows.Networking.Connectivity, Windows.Networking.NetworkOperators, Windows.Networking.Sockets, Windows.Web.AtomPub, Windows.Web.Syndication
编程与数据模型 System Windows.Foundation, Windows.Foundation.Collections, Windows.Foundation.Metadata, Windows.Data.Xml.Dom, Windows.Data.Xml.Xsl,
Windows.Data.Json
位置 System.Device.Location Windows.Devices.Geolocation, Windows.Networking.Proximity
自动化与诊断 System.Diagnostics, System.Windows.Automation.Peers Windows.Foundation.Diagnostics
图形(3D 转换) XNA Framework Class Library,
Content Pipeline Class Library
No equivalent at this time.
控件与UI 基础结构

Microsoft.Phone.Controls,
Microsoft.Phone.Controls.Primitives

Windows.UI.ApplicationSettings, Windows.UI.Core,
Windows.UI.Input,
Windows.UI.Notifications, Windows.UI.ViewManagement
存储 System.IO.IsolatedStorage class Windows.Storage, Windows.Storage.FileProperties

 

责任编辑:王晓东 来源: 51CTO.com
相关推荐

2011-09-09 09:17:41

Windows 8平板Windows Pho微软

2011-05-04 09:29:22

2015-05-05 13:57:12

AndroidWindows

2011-06-17 10:04:56

Windows PhoWindows Pho微软

2011-04-08 10:02:06

日历Windows Pho

2012-02-20 23:12:45

Windows 8Windows Pho同步共享

2015-05-05 10:16:17

AndroidWindows

2023-06-07 09:00:00

JavaScript开发TypeScript

2015-08-07 13:23:27

bridgeios应用移植

2012-06-07 09:15:31

Windows 8兼容

2011-08-09 10:42:24

微软Windows Pho

2012-06-13 13:46:31

Windows Pho诺基亚地图

2014-08-26 10:01:18

Windows Pho平台开发指南

2011-05-31 17:41:38

应用商店Windows Pho诺基亚

2011-12-06 10:45:16

云计算应用Windows Pho

2013-09-02 15:49:38

DirectX 9Windows

2013-01-16 11:21:31

Windows Pho应用商店移动开发

2013-09-29 09:06:38

Windows 9WindowsWindows Pho

2012-04-16 16:02:05

Windows Pho跨平台

2010-11-03 15:10:04

SilverlightSilverlightWindows Pho
点赞
收藏

51CTO技术栈公众号