自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

如何將Windows Phone應(yīng)用移植到Windows 8平臺(tái)

譯文
移動(dòng)開發(fā)
相對(duì)而言,使用C++、C#或Visual Basic將Microsoft Silverlight應(yīng)用從Windows Phone移植至Metro風(fēng)格應(yīng)用是非常容易的,本文主要關(guān)注的是Windows Phone應(yīng)用的移植。

【51CTO譯文】相對(duì)而言,使用 C++、C# 或 Visual Basic將 Microsoft Silverlight 應(yīng)用從 Windows Phone 移植至 Metro風(fēng)格應(yīng)用是非常容易的。大部分的工作內(nèi)容,所需的知識(shí)以及體驗(yàn),將轉(zhuǎn)向使用 XAML 的 Metro風(fēng)格應(yīng)用的模型,許多 XAML 界面設(shè)計(jì)與布局也是如此。

應(yīng)用移植工作主要包含兩部分:

◆修改 UI,利用Windows Metro 風(fēng)格 UI 的功能與設(shè)計(jì)指南;

◆從代碼隱藏文件中調(diào)用的Silverlight API 轉(zhuǎn)向相應(yīng)的 Windows Runtime API。

很多情況下,代碼保持不變,或幾乎不變。雖然存在一些差別,但 Windows Runtime 中基于 XAML 的 UP API 是在 Windows Phone 版本的 Silverlight 上進(jìn)行建模。另外,可使用 Metro 風(fēng)格的 .NET API,這是完整的 .NET Framework 的子集,與.NET Framework for Silverlight 類似。在某些情況下,類似的.NET API已轉(zhuǎn)移到Windows Runtime,只是設(shè)計(jì)有稍許不同。

成功移植應(yīng)用所需的工作量主要取決于:應(yīng)用是否使用了大量 API,而這些 API 并未包含在 Metro 風(fēng)格應(yīng)用的 Windows Runtime 和 .NET API。本文提供了一些常規(guī)的移植指南與資源,用于定位 API 并確定多少代碼必須進(jìn)行替換。

本文主要關(guān)注的是 Windows Phone 應(yīng)用的移植,不過,對(duì)于任何 .NET 和基于XAML 的項(xiàng)目,可在以下主題中找到有用的相關(guān)信息:

將Silverlight 或 WPF XAML/代碼移植到Metro風(fēng)格應(yīng)用

Metro風(fēng)格應(yīng)用.NET概述

Windows Phone 7應(yīng)用移植準(zhǔn)備工作

在進(jìn)行 Windows Phone 7 應(yīng)用移植之前,請(qǐng)考慮以下相關(guān)事項(xiàng):

◆是否需要對(duì)應(yīng)用進(jìn)行快速移植或獲得更佳的可維護(hù)性?“提高可維護(hù)性”部分提供了一些技巧,可用于對(duì)項(xiàng)目進(jìn)行單源處理,并且有助于針對(duì)不同平臺(tái)的項(xiàng)目間代碼再利用。

◆Windows Phone 7 設(shè)備分辨率在水平模式在為水平模式下為800x480 (WVGA),垂直模式下為480x800。Windows 8 Release Preview 設(shè)備可具有多種長(zhǎng)寬比,多種可能的水平與垂直分辨率。界面與資產(chǎn)如何進(jìn)行擴(kuò)展?相關(guān)信息

◆Windows Phone 7 界面為觸摸式的。Windows 8 界面也應(yīng)支持觸摸,同時(shí)還需支持其他輸入方式,如鼠標(biāo)和鍵盤。對(duì)于某些未使用觸摸的用戶,你的界面是否感覺很笨拙?無論何種輸入方式,如何保持應(yīng)用的可用性?相關(guān)信息,請(qǐng)參閱“可訪問性計(jì)劃”。

◆Windows Phone 7 應(yīng)用中是否具有手機(jī)專業(yè)的功能?想法了解Windows Runtime 中相對(duì)應(yīng)的網(wǎng)絡(luò)技術(shù)?如果對(duì)手機(jī)或提供商提供更多功能支持,那么可能需對(duì)其進(jìn)行重新開發(fā),提供更多的網(wǎng)絡(luò)或提供商獨(dú)立性。

◆游戲應(yīng)用是否依賴用于圖形渲染的 Microsoft XNA 組件?如果是,對(duì)于 Windows 8 應(yīng)用無法使用 XNA。另外,對(duì)于托管代碼,無法有效地使用 DirectX;如果未使用第三發(fā)托管 API,那么必須使用 C++ 進(jìn)行 DirectX 游戲開發(fā)。有關(guān)更多信息,請(qǐng)參閱“創(chuàng)建DirectX游戲”。

常規(guī)移植過程

如果為了優(yōu)化上市時(shí)間,需快速移植應(yīng)用,請(qǐng)遵循以下步驟:

1.打開 Microsoft Visual Studio Express 2012 RC for Windows 8,使用C++、C# 或 Visual Basic 新建 Metro 風(fēng)格應(yīng)用。選擇應(yīng)用布局與功能最為匹配的項(xiàng)目模板。有關(guān)更多信息,請(qǐng)參閱“使用模板(C++、C#、Visual Basic)快速創(chuàng)建 Metro 風(fēng)格應(yīng)用”。

2.復(fù)制想要在新項(xiàng)目中再利用的文件夾、代碼與資產(chǎn)文件。

3.在 Visual Studio 的“解決方案瀏覽器”(Solution Explorer),單擊“顯示所有文件”(Show All Files)。

4.選擇已復(fù)制的文件與文件夾,然后右鍵單擊并選擇“包含在項(xiàng)目中”(Include In Project)。

5.執(zhí)行全局搜索與替換,將“System.Windows”替換為“Windows.UI.Xaml”。

6.將原始 XAML 代碼中可重用部分復(fù)制到新項(xiàng)目的 XAML 文件,或新建的 XAML 文件(如需要)。通常,頁(yè)面布局根(典型的示例:Grid 元素)可進(jìn)行復(fù)制并重用,而最外層元素(如 PhoneApplicationPage 元素)并非如此。

7.構(gòu)建項(xiàng)目,生成錯(cuò)誤,然后這些錯(cuò)誤找到需進(jìn)行更新或替換的代碼。有時(shí),所需的這種更新非常少,只是對(duì)參數(shù)類型進(jìn)行更改。但有些更新需要使用 Metro style 所用的 Windows Runtime API 替代 .NET API。為了確認(rèn)支持哪些 API,可使用本文與“Metro 風(fēng)格應(yīng)用 .NET 概述”以及“將 Silverlight 或 WPF XAML/代碼移植到 Metro 風(fēng)格應(yīng)用”,獲取相關(guān)指南。

8.對(duì)于任何無法輕易進(jìn)行更新的代碼,請(qǐng)進(jìn)行評(píng)注或清除,直到項(xiàng)目構(gòu)建。

9.一次對(duì)評(píng)注代碼的一個(gè)問題進(jìn)行更新或替換,直到移植完成。

#p#

提高可維護(hù)性

為了多個(gè)平臺(tái)上的應(yīng)用維護(hù)變得更加容易,請(qǐng)考慮使用以下技巧:

◆在移植之前,請(qǐng)對(duì)代碼進(jìn)行重構(gòu),使其盡可能可重用。尤其,通過應(yīng)用設(shè)計(jì)模式,如將業(yè)務(wù)邏輯與 UI 邏輯分開的Model-View-ViewModel (MVVM),可避免 UI API 差異方面的問題。使用 MVVM,模型與視圖模型代碼在不同平臺(tái)上可保持大部分不變,同時(shí)視圖代碼(XAML)可根據(jù)平臺(tái)定制。

◆在項(xiàng)目之間共享可重用代碼文件,而不是維護(hù)針對(duì)不同平臺(tái)的多個(gè)副本。如需在 Visual Studio 中進(jìn)行此類操作,請(qǐng)“解決方案瀏覽器”(Solution Explorer)中右鍵單擊該項(xiàng)目,選擇“添加已有項(xiàng)”(Add Existing Item),選擇共享文件,然后單擊“添加為鏈接”(Add As Link)。

◆如需在共享文件中包含某些平臺(tái)專用代碼,請(qǐng)使用條件編譯。這種方式僅適用于 C#、C++ 和 Visual Basic 代碼。對(duì)于 XAML,必須對(duì)分開的代碼文件進(jìn)行分別維護(hù)。

◆使用 Portable Class Library 創(chuàng)建跨平臺(tái)的庫(kù)程序集。該可移植類庫(kù)包含 .NET Framework for Silverlight、Metro 風(fēng)格應(yīng)用 .NET API 和完整的 .NET Framework 中可用 .NET API 的子集。可移植類庫(kù)是與全部三個(gè)平臺(tái)兼容的二進(jìn)制文件,因此對(duì)于代碼重用是最為簡(jiǎn)單的方式。不過,為了創(chuàng)建針對(duì)可移植類庫(kù)的項(xiàng)目,必須使用 Microsoft Visual Studio Professional 2012 RC 或更高版本。

#p#

移植用戶界面

Silverlight 的大多數(shù)布局類型,如Canvas、GridStackPanel,在 Windows Runtime XAML 命名空間里也會(huì)出現(xiàn)。雖然為了適應(yīng)多種高于 800x480 的分辨率,Grid 和布局設(shè)置需要進(jìn)行調(diào)整,但基本用戶界面結(jié)構(gòu)的移植應(yīng)是直接式的。

當(dāng)然,手機(jī) UI 可能專門為小屏幕手機(jī)而設(shè)計(jì)。簡(jiǎn)單地對(duì)其繼續(xù)擴(kuò)展并非最佳設(shè)計(jì),應(yīng)根據(jù) Metro 風(fēng)格應(yīng)用的功能以及 Windows 8 設(shè)備的多種形狀因素對(duì) UI 進(jìn)行重構(gòu)。這種功能之一為分屏視圖(snapped view),對(duì)此手機(jī) UI 設(shè)計(jì)可能是有用的。

更多信息與設(shè)計(jì)指南,請(qǐng)參閱以下主題:

制作優(yōu)秀的 Metro 風(fēng)格應(yīng)用

多種形狀因素計(jì)劃

支持多種視圖

用戶體驗(yàn)設(shè)計(jì)

用戶界面指南

使用設(shè)計(jì)清單

對(duì)定義應(yīng)用布局的 XAML 文件進(jìn)行調(diào)整之后,需要更新隱藏代碼,以使用 Windows Runtime API 替代 Silverlight API。對(duì)于用戶界面元素,在兩個(gè) API 庫(kù)之間存在相當(dāng)一致的映射。

以下為 Windows Runtime XAML 命名空間,大體上與對(duì)應(yīng)的 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

請(qǐng)注意,以下 Silverlight XAML 命名空間在 Windows Runtime 中不具有直接的對(duì)等項(xiàng):

◆System.Windows.Ink

◆System.Windows.Media.Effects

◆System.Windows.Messaging

#p#

使用 XAML 的Silverlight 與 Metro 應(yīng)用之間的不同

雖然對(duì)于 Windows Phone 7 和 Windows 8,Metro 風(fēng)格 UI 是相同的,但在兩個(gè)平臺(tái)的 UI 的功能之間還存在一些差異。以下部分對(duì)其中一些關(guān)鍵的不同進(jìn)行了描述。不過,為了確定具體支持哪些功能,應(yīng)查詢 API 引用。更多關(guān)于使用 XAML 的 Metro 風(fēng)格應(yīng)用信息,請(qǐng)參閱“采用 C# 或 Visual Basic 的 Metro 風(fēng)格應(yīng)用的路線圖”。

控件與布局

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

Windows Runtime 未包含 Silverlight for Windows Phone 中提供的 Pivot 和 Panorama 控件。這些控件專門為手機(jī)形狀因素而設(shè)計(jì),有助于提升比手機(jī)屏更大屏幕上的用戶體驗(yàn)。Metro 風(fēng)格應(yīng)用通常具有更大的屏幕空間,并且應(yīng)利用具有更大靈活性的 Grid 控件的優(yōu)勢(shì)。另外,還可以使用 FlipView 控件來提供簡(jiǎn)潔的翻頁(yè)體驗(yàn)。

Windows Runtime 中的 AppBar 控件提供的體驗(yàn)與手機(jī) ApplicationBar 類似,不過具有更多的靈活性,支持定制布局與數(shù)據(jù)綁定。

Windows Phone 可聲明支持何種設(shè)備旋轉(zhuǎn)方式,因此能夠?qū)Ρ匦璧牟季朱`活性進(jìn)行限制。對(duì)于 Metro 風(fēng)格應(yīng)用,UI 設(shè)計(jì)應(yīng)不受設(shè)備選擇方式與屏幕尺寸的限制。

更多關(guān)于控件的信息,請(qǐng)參閱“功能控件”。

磁貼與通知

Metro 風(fēng)格應(yīng)用的磁貼與 Windows Phone 7 的動(dòng)態(tài)磁貼(Live Tile)類似,不過還存在一些差異。更多有關(guān)使用 C++、C# 或 Visual Basic 的 Metro 風(fēng)格應(yīng)用中的磁貼使用,請(qǐng)參閱創(chuàng)建磁貼

通知是 Windows Phone 7 中推送通知模型的擴(kuò)展。更多 Metro 風(fēng)格應(yīng)用中通知使用的詳細(xì)信息,請(qǐng)參閱發(fā)送消息條通知。

在使用C++、C# 或 Visual Basic 的 Metro 風(fēng)格應(yīng)用中使用磁貼、消息條和通知的更多信息與教程,請(qǐng)參閱使用磁貼、徽章和消息條通知。

數(shù)據(jù)應(yīng)用場(chǎng)景

Metro 風(fēng)格應(yīng)用目前不包含對(duì)數(shù)據(jù)密集型應(yīng)用場(chǎng)景(如業(yè)務(wù)線)的內(nèi)置支持。例如,沒有用于客戶端 SQL 的 API 并且沒有本地?cái)?shù)據(jù)庫(kù)。但是,利用定制服務(wù)與 OData 調(diào)用,仍然可從網(wǎng)絡(luò)對(duì)數(shù)據(jù)進(jìn)行檢索,并且利用客戶端 LINQ 可對(duì)數(shù)據(jù)進(jìn)行形狀與格式化處理,同時(shí)可利用基于 XAML 控件可進(jìn)行綁定。

數(shù)據(jù)綁定大部分保持不變。例如,可部署 INotifyPropertyChanged 和 INotifyCollection,可相應(yīng)地接收更改通知與更新 UI。但是,Metro 風(fēng)格應(yīng)用的數(shù)據(jù)相關(guān)功能當(dāng)前還存在以下限制:

◆對(duì)數(shù)據(jù)項(xiàng)驗(yàn)證和 IDataErrorInfo 和 INotifyDataErrorInfo 接口,未提供內(nèi)置支持。

◆Binding 類未包含 Silverlight 中可用的擴(kuò)展格式化屬性。但是,仍可部署 IValueConverter 已提供定制格式化。

◆IValueConverter 方法將語(yǔ)言字符串作為參數(shù)而不是 CultureInfo 對(duì)象。

◆CollectionViewSource 類未對(duì)于工作的排序、過濾和分組分別提供內(nèi)置支持。更多信息,請(qǐng)參閱“使用 XAML 進(jìn)行數(shù)據(jù)綁定”和“數(shù)據(jù)綁定示例”。

導(dǎo)航

為了與平臺(tái)進(jìn)行集成以及利用硬件“后退”按鍵,Silverlight for Windows Phone 應(yīng)用需要使用基于頁(yè)面的導(dǎo)航結(jié)構(gòu)。對(duì)于 Metro 風(fēng)格應(yīng)用,提供了類似的導(dǎo)航架構(gòu),但是由于平臺(tái)的要求不同,存在一些差異:

◆在 Metro 風(fēng)格應(yīng)用中導(dǎo)航至某個(gè)頁(yè)面時(shí),并未使用 URI 尋址方案,而是指定目標(biāo)頁(yè)面的類型,在該頁(yè)面 XAML 定義的x:Class屬性中顯示。另外,還可以選擇性地傳遞參數(shù)對(duì)象。

◆Metro 風(fēng)格應(yīng)用的導(dǎo)航框架不支持框架導(dǎo)航、日記(Back 堆棧)修訂和 URI 映射。

更多信息,請(qǐng)參閱快速入門:頁(yè)面間導(dǎo)航。

#p#

將 Windows Phone 7 API 映射至 Windows Runtime API

下表提供 Windows Phone 7 專用 API 與 Windows Runtime API 之間的粗略映射。該表不表示一對(duì)一的功能映射;任何平臺(tái)提供的功能與對(duì)應(yīng)平臺(tái)都或多或少存在一些差異。

API 類型 Silverlight API 命名空間 Windows Runtime API 命名空間
設(shè)備 Microsoft.Devices,
Microsoft.Devices.Radio, Microsoft.Devices.Sensors
Windows.Devices.Enumeration, Windows.Devices.Enumeration.Pnp, Windows.Devices.Input, Windows.Devices.Sensors
Windows Phone 應(yīng)用模型與環(huán)境 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
網(wǎng)絡(luò)與聯(lián)合 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
編程與數(shù)據(jù)模型 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
自動(dòng)化與診斷 System.Diagnostics, System.Windows.Automation.Peers Windows.Foundation.Diagnostics
圖形(3D 轉(zhuǎn)換) XNA Framework Class Library,
Content Pipeline Class Library
No equivalent at this time.
控件與UI 基礎(chǔ)結(jié)構(gòu)

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

Windows.UI.ApplicationSettings, Windows.UI.Core,
Windows.UI.Input,
Windows.UI.Notifications, Windows.UI.ViewManagement
存儲(chǔ) System.IO.IsolatedStorage class Windows.Storage, Windows.Storage.FileProperties

 

責(zé)任編輯:王曉東 來源: 51CTO.com
相關(guān)推薦

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微軟

2012-02-20 23:12:45

Windows 8Windows Pho同步共享

2015-05-05 10:16:17

AndroidWindows

2011-04-08 10:02:06

日歷Windows Pho

2015-08-07 13:23:27

bridgeios應(yīng)用移植

2023-06-07 09:00:00

JavaScript開發(fā)TypeScript

2012-06-07 09:15:31

Windows 8兼容

2011-08-09 10:42:24

微軟Windows Pho

2014-08-26 10:01:18

Windows Pho平臺(tái)開發(fā)指南

2012-06-13 13:46:31

Windows Pho諾基亞地圖

2011-12-06 10:45:16

云計(jì)算應(yīng)用Windows Pho

2011-05-31 17:41:38

應(yīng)用商店Windows Pho諾基亞

2013-09-29 09:06:38

Windows 9WindowsWindows Pho

2013-09-02 15:49:38

DirectX 9Windows

2013-01-16 11:21:31

Windows Pho應(yīng)用商店移動(dòng)開發(fā)

2010-11-03 15:10:04

SilverlightSilverlightWindows Pho

2012-04-16 16:02:05

Windows Pho跨平臺(tái)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)