從 Windows Runtime 8.x 移至 UWP

如果您有 Universal 8.1 應用程式 (無論它適用於 Windows 8.1、Windows Phone 8.1 還是兩者皆適用於),您會發現您的原始程式碼和技能將順利移植到 Windows 10。 使用 Windows 10,您可以建立通用 Windows 平台 (UWP) 應用程式,這是單一應用程式套件,您的客戶可以將其安裝到各種裝置上。 有關 Windows 10、UWP 應用程式的更多背景資訊,以及我們將在本移植指南中提到的調適型程式碼和調適型 UI 的概念,請參閱 UWP 應用程式指南

在移植過程中,您會發現 Windows 10 與先前的平台共用大部分 API,以及 XAML 標記、UI 架構和工具,讓您感覺一切都非常熟悉。 與以前一樣,您仍然可以選擇 C++、C# 和 Visual Basic 等程式語言與 XAML UI 架構搭配使用。 準確規劃目前應用程式處理方法的第一步,取決於您擁有的應用程式和專案的類型。 下列各節會有相關說明。

如果您有 Universal 8.1 應用程式

Universal 8.1 應用程式是從 8.1 Universal App 專案建置的。 假設該項目的名稱是 AppName_81。 其包含以下子專案。

  • AppName_81.Windows。 這是為 Windows 8.1 建置應用程式套件的專案。
  • AppName_81.WindowsPhone。 這是為 Windows Phone 8.1 建置應用程式套件的專案。
  • AppName_81.Shared。 此專案包含原始程式碼、標記檔案以及其他資產和資源,這些內容也可由其他兩個專案使用。

通常,8.1 Universal Windows 應用程式在其 Windows 8.1 和 Windows Phone 8.1 版本中提供相同的功能,並使用相同的程式碼和標記。 對於移植到面向通用裝置系列 (並且您可以安裝到最多裝置上) 的單一 Windows 10 應用程式來說,此類應用程式會是理想的候選者。 實際上,您將移植共用專案的內容,並且您將需要使用其他兩個專案中的少量內容,或根本不使用,因為其中的內容可能少到趨近於無。

其他時候,Windows 8.1 和/或 Windows Phone 8.1 形式的應用程式包含獨特的功能。 或者它們包含相同的功能,但使用不同的技術來實作這些功能。 對於這樣的應用程式,您可以選擇將其移植到面向通用裝置系列的單一應用程式 (在這種情況下,您會希望該應用程式適應不同的裝置),或者您可以選擇將其移植為多個應用程式,也許一個面向桌面裝置系列,另一個面向行動裝置系列。 Universal 8.1 應用程式的性質將決定哪些選項最適合您使用。

  1. 將共用專案的內容移植到面向通用裝置系列的應用程式。 如果適用,請搶救 Windows 和 WindowsPhone 專案中的其他內容,並在應用程式中無條件地使用該內容,或在應用程式當時正在執行的裝置上有條件地使用該內容 (後一種行為稱為調適)。
  2. 將 WindowsPhone 專案的內容移植到面向通用裝置系列的應用程式。 如果適用,請從 Windows 專案中搶救其他內容,無條件或調適性地使用它。
  3. 將 Windows 專案的內容移植到面向通用裝置系列的應用程式。 如果適用,請從 WindowsPhone 專案中搶救其他內容,無條件或調適性地使用它。
  4. 將 Windows 專案的內容移植到面向通用或桌面裝置系列的應用程式,並將 WindowsPhone 專案的內容移植到面向通用或行動裝置系列的應用程式。 您可以使用共用專案建立解決方案,並繼續在兩個專案之間共用原始程式碼、標記檔案以及其他資產和資源。 或者,您可以建立不同的解決方案,但仍然使用連結共用相同的項目。

如果您有 Windows 8.1 應用程式

將專案移植到面向通用或桌面裝置系列的應用程式。 如果您選擇通用裝置系列,並且您的應用程式呼叫僅在桌面裝置系列中實作的 API,則您可以使用調適型程式碼保護這些呼叫。

如果您有 Windows Phone 8.1 應用程式

將專案移植到面向通用或行動裝置系列的應用程式。 如果您選擇通用裝置系列,並且您的應用程式呼叫僅在行動裝置系列中實作的 API,則您可以使用調適型程式碼保護這些呼叫。

讓您的應用程式適應多種外形規格

您在先前各節中選擇的選項會決定您的應用程式將執行的裝置範圍,而且該範圍很可能非常廣泛。 即使將應用程式限制為行動裝置系列,您仍然可以支援各種螢幕尺寸。 因此,如果您的應用程式將在先前不支援的外形規格上執行,請在這些外形規格上測試您的 UI,並進行必要的變更,使 UI 在各種外形規格上進行適當地調整。 您可以把這當作移植後的工作或移植延伸目標,Bookstore2QuizGame 案例研究中有一些實務範例。

逐層移植

將 Universal 8.1 應用程式移植到 UWP 應用程式模型時,幾乎所有的知識和經驗都將轉移,大部分原始程式碼和標記以及您使用的軟體模式也將轉移。

  • 檢視表。 檢視 (以及檢視模型) 構成了應用程式的 UI。 理想情況下,檢視由繫結到檢視模型可觀察屬性的標記所組成。 另一種模式 (常見且方便,但僅適用於短期) 是使用程式碼後置檔案中的命令式程式碼來直接操作 UI 元素。 無論哪種情況,您的 UI 標記和設計 (甚至是操作 UI 元素的命令式程式碼) 都能夠輕鬆移植。
  • 檢視模型和資料模型。 即使您沒有正式採用關注點分離模式 (例如 MVVM),您的應用程式中也必定會存在執行檢視模型和資料模型功能的程式碼。 檢視模型程式碼會使用 UI 架構命名空間中的類型。 檢視模型和資料模型程式碼也都會使用非視覺化作業系統和 .NET Framework API (包括用於資料存取的 API)。 這些 API 也可用於 UWP 應用程式,因此大多數這類程式碼都無需變更即可移植。
  • 雲端服務。 您的某些應用程式 (或許是大部分) 可能是以服務形式在雲端中執行。 在用戶端裝置上執行的應用程式部分會連接到這些裝置。 這是分散式應用程式在移植用戶端部分時,最有可能保持不變的部分。 如果您還沒有選擇雲端服務,那麼對於您的 UWP 應用程式來說,Microsoft Azure 行動服務會是一個不錯的選擇,它提供了強大的後端元件,您的應用程式可以呼叫這些元件來獲取各種服務,包括從簡單的動態磚更新通知,到伺服器叢集可以提供的繁重可擴充性。

在移植之前或期間,請考慮是否可以透過重構來改進您的應用程式,以便具有相似用途的程式碼分層聚集在一起,而不是隨意分散。 將您的應用程式分解為各層級 (如上所述) 可以讓您更輕鬆地使應用程式正確運作、進行測試,然後讀取和維護應用程式。 您可以透過遵循 Model-View-ViewModel (MVVM) 模式來提高功能的可重複使用性。 此模式會讓應用程式的資料、商務和 UI 部分彼此分開。 即使在 UI 中,它也可以將狀態和行為與視覺效果分開,並且可以單獨測試。 使用 MVVM,您可以編寫一次資料和商務規則,然後在所有裝置上使用它,無論 UI 為何。 您可能也能夠跨裝置重複使用大部分檢視模型和檢視元件。

主題 說明
移植專案 開始移植程序時,您有兩個選擇。 一個選擇是編輯現有專案檔案的副本,包括應用程式套件資訊清單 (有關該選項,請參閱將應用程式移轉到通用 Windows 平台 (UWP) 中有關更新專案檔案的資訊)。 另一個選擇是在 Visual Studio 中建立新的 Windows 10/11 專案,並將檔案複製到其中。
疑難排解 強烈建議您完整閱讀本移植指南,但我們也理解您渴望進行下一步,進入專案建立和執行的階段。 為此,您可以透過註釋或刪除任何非必要的程式碼來暫時取得進展,之後再回來繼續閱讀。 本主題中的疑難排解症狀和補救措施表在此階段可能對您有所幫助,但只靠它並不能取代接下來的幾個主題。 當您學習到後面的主題時,隨時都可以返回參考該資料表。
移植 XAML 和 UI 以宣告式 XAML 標記的形式定義 UI 的做法,可以順暢地從 Universal 8.1 應用程式轉換為 UWP 應用程式。 您會發現大多數標記都是相容的,不過您可能需要對正在使用的系統資源索引鍵或自訂範本進行一些調整。
I/O、裝置和應用模型移植 與裝置本身及其感應器整合的程式碼涉及使用者的輸入和輸出。 它還可能涉及處理數據。 但是,此程式碼通常不會視為 UI 層或資料層。 此程式碼包括與振動控制器、加速計、陀螺儀、麥克風和喇叭 (與語音識別和合成交集) 、 (地理) 位置和輸入方式 (觸控、滑鼠、鍵盤和手寫筆等) 的整合。
案例研究:Bookstore1 本主題中的案例研究將介紹如何把簡易 Universal 8.1 應用程式移植到 Windows 10 和 Windows 11 UWP 應用程式中。 Universal 8.1應用程式可建置適用於 Windows 8.1 的應用程式套件,以及適用於 Windows Phone 8.1 的其他應用程式套件。 使用 Windows 10 和 Windows 11,您可以建立一個應用程式套件,讓客戶將其安裝到各種裝置上,這就是我們在本案例研究中要做的事情。 請參閱 UWP 應用程式指南
案例研究:Bookstore2 本案例研究是以 SemanticZoom 控制項中提供的資訊為基礎。 在檢視模型中,作者類別的每個執行個體代表該作者撰寫的書籍群組,在 SemanticZoom 中,我們可以查看依照作者分組的書籍清單,也可以縮小以查看作者的捷徑清單。
案例研究:QuizGame 本主題中的案例研究介紹了如何將正常運作的點對點問答遊戲 WinRT 8.1 範例應用程式移植到 Windows 10 和 Windows 11 UWP 應用程式。

文件