在 Windows Developer Day 活動同時,微軟正式 Release 了 Windows 10 SDK Preview Build 17110。 Windows 10 SDK Preview Build 17110 在 UI 設計,游戲,應用開發,應用發佈和盈利等方向都有很多更新,下麵 ...
在 Windows Developer Day 活動同時,微軟正式 Release 了 Windows 10 SDK Preview Build 17110。
Windows 10 SDK Preview Build 17110 在 UI 設計,游戲,應用開發,應用發佈和盈利等方向都有很多更新,下麵我們在每個方向找出一些重點更新來詳細看一下。
UI 設計
Adaptive and interactive toast notifications
自適應和可交互的應用通知可以提升應用的使用體驗。本次 SDK 更新在通知方面的提升主要是通知中圖片限制的調整,通知中的進度條和輸入選項的增加。
1. 圖片尺寸限制
圖片來源包括:http://,ms-appx:///,ms-appdata:///
對於網路圖片,圖片尺寸限制的單位是單個圖片尺寸。16299 以後,normal connections 的限制是 3MB,metered connections 的限制是 1MB;而之前的限制統一是 200 KB。可以看到對網路圖片的尺寸限制放寬了很多,很多高清晰度的圖片也可以被使用。
如果你的圖片超過了這個尺寸限制,或者下載過程中失敗,超時,通知會正常被顯示,不過圖片部分會被放棄。
2. 進度條
Toast progress bar and data binding
在某些場景,例如下載或其他過程進行時,需要在通知中顯示進度條,讓用戶可以保持對進度的關註。進度條可以是不確定的或者確定的,
Design samples
Design toolkits and samples for UWP apps
Fluent Design 的演示 Sample - BuildCast 已經加入到 Design toolkits and samples 頁面。展示了 Fluent Design 系統和 UWP 其他的功能。
BuildCast sample 也在 GitHub 開源:https://github.com/Microsoft/BuildCast
另外下列的工具箱都提供了控制項和模板供 UWP 設計使用:
- Adobe XD toolkit (v1803, March 2018)
- Adobe Illustrator toolkit (v1803, March 2018)
- Sketch toolkit (v1803, March 2018)
- Adobe Photoshop toolkit (v1705, May 2017)
- Framer toolkit (on GitHub) (v1710, August 2017)
Embedded handwriting
文本控制項加入了觸控筆的支持,目前在 Windows 預覽版系統中支持,用戶可以使用觸控筆直接在 TextBox,RichTextBox 和 AutoSuggestBox 控制項中使用 Windows Ink 進行書寫。在用戶書寫後,根據手寫筆記轉換成對應的文字,並保留手寫的痕跡。
大家可以在 Microsoft Store 下載 XAML Controls Gallery 應用來查看 TextBox 手寫的 Demo,或者在 GitHub 下載 Windows-universal-samples 來查看控制項的使用 Sample。
來看看內置手寫的官方演示:
用戶可以在文本控制項中任何位置進行書寫,在候選視窗中識別出手寫的結果並給用戶推薦使用。用戶可以選擇一個結果,或在接受結果後繼續書寫。識別結果是逐個字母來識別的,所以識別結果不限於字典中的單詞。在用戶書寫後,根據手寫筆記轉換成對應的文字,並保留手寫的痕跡。
用戶可以使用標準手勢和操作來編輯文字:
- 穿過或劃掉 -- 穿過的動作去刪除一個詞或詞的一部分
- 連接 -- 在詞之間畫一個弧形來刪除詞之間的空格
- 插入 -- 畫一個插入符號可以插入一個空格
- 重寫 -- 在現有文字上書寫可以替換它
應用目標版本為 1803 或更新時才可以使用嵌入手寫輸入。把 IsHandwritingViewEnabled 屬性設置為 false 可以禁用這個功能。
嵌入手寫輸入對於觸屏設備會非常的方便易用,也會避免虛擬鍵盤操作的不方便。讓觸控筆的操作更加真實化,提高書寫效率和體驗。
Navigation view
Microsoft Doc: Navigation view
Navigation View 控制項提供了一個可收起的導航菜單作為 App 里的頂級導航,它實現自 nav pane 或 hamburger menu,可以針對不同的窗體尺寸自適應 pane 的顯示模式。
微軟推薦在以下場景使用 Navigation View:
- 存在同一類型多個頂級導航元素,例如一個體育類 App 中包含不同的體育項目
- 5-10 個頂級導航分類的場景
- 提供一個易用的導航體驗,容器中僅包含導航元素,不包含任何操作
- 在小視窗時保留屏幕真實的觀感
如果想瞭解更多關於導航的模式和基礎概念,可以看這裡:Navigation design basics for UWP apps
NavigationView 控制項有很多的內置行為實現自簡單的 nav pane 模式。如果大家想要更多複雜的行為而 NavigationView 不支持,可以嘗試 Master/Detail 模式。
大家可以在 Microsoft Store 下載 XAML Controls Gallery 應用來查看 NavigationView 的 Demo,或者在 GitHub 下載 Windows-universal-samples 來查看控制項的使用 Sample。
來看看 NavigationView 的 Demo:
<NavigationView Loaded="NavigationView_Loaded" Margin="0,12,0,0" Grid.Row="1" SelectionChanged="NavigationView_SelectionChanged" x:Name="nvSample" IsSettingsVisible="{Binding ElementName=settingsCheck,Path=IsChecked}" IsTabStop="False" RS4Api:PaneTitle="{Binding ElementName=paneText,Path=Text}" RS4Api:IsBackButtonVisible="{Binding ElementName=visibleCheck,Converter={StaticResource BooleanNegationToBackVisibilityConverter},Path=IsChecked}" RS4Api:IsBackEnabled="{Binding ElementName=enableCheck,Path=IsChecked} Header="This is header text."> <NavigationView.MenuItems> <NavigationViewItem Icon="Play" Content="Menu Item1" Tag="SamplePage1" /> <NavigationViewItemSeparator/> <NavigationViewItem Icon="Save" Content="Menu Item2" Tag="SamplePage2" /> <NavigationViewItem Icon="Refresh" Content="Menu Item3" Tag="SamplePage3" /> </NavigationView.MenuItems> <Frame x:Name="contentFrame"> </Frame> </NavigationView>
游戲
Getting started for game development
https://docs.microsoft.com/en-us/windows/uwp/gaming/getting-started
如果大家對 Windows 或 Xbox 的游戲開發有興趣,可以看一下這裡的入門指引:
1. 獲取軟體和工具,包括 Windows 10 系統,Visual Studio 等
2. 準備好開發的硬體,在硬體設備上打開開發者模式
3. 運行一個 Demo 檢查工作結果
4. 加入一個開發者計劃
5. 註冊一個開發者賬號,讓你可以把游戲發佈到應用商店
Graphics adapters
新增了幾個 DXGI API,影響圖形適配偏好和移除
- IDXGIFactory6 介面提供一個方法,可以枚舉出基於 GPU 偏好的圖形適配器列表
- DXGIDeclareAdapterRemovalSupport 方法聲明瞭適配器移除的支持
- DXGI_GPU_PREFERENCE 描述了用於 App 運行的 GPU 偏好
應用開發
Adaptive Cards
一種可以讓開發者以更通用和統一的方式來對卡片對展示和交互的方式。
詳情見 Windows Developer Day - Adaptive Cards
App Resource Group
AppResourceGroupInfo 提供了新的方法,讓用戶可以發起過渡狀態,讓 App 進入暫停,激活和終止狀態。
對應的方法名分別:
- StartResumeAsync() -- 發起狀態變化,讓 App 變為激活狀態;
- StartSuspendAsync() -- 發起狀態變化,讓 App 變為暫停狀態;
- StartTerminateAsync() -- 發起狀態變化,讓 App 變為終止狀態;
Broad file-system access
broadFileSystemAccess 能力允許應用訪問文件系統,在不使用 filepicker 的前提下。需要在 Manifest 的 capability 中進行設置。
Console UWP apps
Create a Universal Windows Platform console app
開發者可以使用 C++ /WinRT 或 CX /UWP 來創建 Console App,像 DOS 或 PowerShell 一樣運行在控制台。Console App 的輸入和輸出都來自控制台。UWP 的 Console App 可以發佈到 Microsoft Store,在 app list 中有一個主入口,一個主磁貼可以被固定到開始菜單。
開發 UWP Console App 之前,需要下載 Console App (Universal) Project Templates, 地址:Visual Studio Marketplace
下載模板後,就可以使用 C++ /WinRT 或 CX /UWP 來創建 UWP Console App 了,開發過程和普通的 Console App 很類似。
UWP Console App 可以訪問應用所在目錄和所有子目錄,因為它的模板中在 manifest 中添加了 AppExecutionAlias 的擴展,這種擴展讓用戶可以在控制臺中輸入縮寫來啟動應用,應用不需要在系統的應用啟動目錄中。
同時開發者可以添加更廣的文件系統訪問許可權,只需要通過 broadFileSystemAccess 的能力設置,詳情見上面的介紹。
同時 UWP Console App 也支持多實例運行,因為它的模板中在 manifest 中添加了 SupportsMultipleInstances 能力。
模板同時添加了 SubSystem="console" 能力,標誌了當前 App 是一個 Console App,它支持傳統 Windows 和 IoT 項目。
官方提出的幾個 UWP Console App 的註意事項:
- 只能使用 C++ /WinRT 或 CX /UWP 來開發
- 目標必須是 桌面或 IoT 項目類型
- 應用中不能創建窗體,所以 MessageBox 這樣的窗體不能使用
- 不支持後臺任務
- 不支持激活協議,如文件和協議等
- 支持多實例,但不支持多實例重定向
- Win32 API 可用列表:Win32 and COM APIs for UWP apps
Machine Learning
千呼萬喚始出來的 Windows AI Platform 和 Windows Machine Learning。
詳情見 Windows Developer Day - Windows AI Platform
Multi-instance UWP apps
Create a multi-instance Universal Windows App
UWP App 可以通過配置來支持多實例,如果一個實例正在運行,一個運行的請求發過來,平臺不會激活目前存在的實例,而是會創建一個新的實例,運行在一個單獨的進程中,這個特性在 1803 版本開始被支持。
同樣的,多實例特性需要在 Visual Studio 中安裝新的項目模板:Multi-Instance App Project Templates.VSIX, 安裝後,使用 C# 和 C++ 都可以創建項目。
兩個模板會被安裝:
- Multi-Instance UWP app -- 創建一個多實例的 App
- Multi-Instance Redirection UWP app -- 提供一個附加的邏輯,讓用戶可以選擇啟動新實例,或者選擇目前激活的實例。可以想象一下 Office 打開或編輯文件時的場景。
這兩個模板都會在 manifest 文件中添加 SupportsMultipleInstances,其中 desktop4 和 iot2 首碼標誌了項目只支持傳統桌面 Windows 和 IoT 系統。manifest 配置如下:
<Package ... xmlns:desktop4="http://schemas.microsoft.com/appx/manifest/desktop/windows10/4" xmlns:iot2="http://schemas.microsoft.com/appx/manifest/iot/windows10/2" IgnorableNamespaces="uap mp desktop4 iot2"> ... <Applications> <Application Id="App" ... desktop4:SupportsMultipleInstances="true" iot2:SupportsMultipleInstances="true"> ... </Application> </Applications> ... </Package>
而 Multi-Instance Redirection UWP app 中對於當前實例的選擇,在應用 OnLaunched() 和 OnActivated() 方法執行前的 Main() 方法中進行。這樣就可以在任何其他代碼執行前,決定哪個實例被激活。
public static class Program { static void Main(string[] args) { // First, we'll get our activation event args, which are typically richer // than the incoming command-line args. We can use these in our app-defined // logic for generating the key for this instance. IActivatedEventArgs activatedArgs = AppInstance.GetActivatedEventArgs(); // In some scenarios, the platform might indicate a recommended instance. // If so, we can redirect this activation to that instance instead, if we wish. if (AppInstance.RecommendedInstance != null) { AppInstance.RecommendedInstance.RedirectActivationTo(); } else { // Define a key for this instance, based on some app-specific logic. // If the key is always unique, then the app will never redirect. // If the key is always non-unique, then the app will always redirect string key = Guid.NewGuid().ToString(); // always unique. //string key = "Some-App-Defined-Key"; // never unique. var instance = AppInstance.FindOrRegisterInstanceForKey(key); if (instance.IsCurrentInstance) { // If we successfully registered this instance, we can now just // go ahead and do normal XAML initialization. global::Windows.UI.Xaml.Application.Start((p) => new App()); } else { // Some other instance has registered for this key, so we'll // redirect this activation to that instance instead. instance.RedirectActivationTo(); } } } }
Screen capture
在 Windows 10 1803 版本後,SDK 提供 API 可以獲取當前顯示或應用視窗的圖形幀,創建視頻流或截屏。有了這個功能,開發者可以調用系統 UI 選擇截圖的範圍,同時被截圖的區域會有一個黃色的邊框提示。具體實現方式,可以參考上面鏈接中的示例代碼。
Windows Mixed Reality
為支持高速發展的 Windows MR 平臺,新的 API 被添加到 Windows.Graphic.Holographic 和 Windows.UI.Input.Spatial 命名空間。
Windows MR 是一個很有前景的平臺,有興趣的開發者可以在 Windows Mixed Reality 獲取更多信息。
應用發佈和盈利
Enter free-form prices in a specific market's local currency
當開發者針對某個特性市場重新制定 App 的價格時,不再局限於標準的價格選擇,而是可以選擇自己輸入特定的價格數值。
目前的 17110 SDK 重點大致就是這些了,等 SDK 正式發佈後,我們會再針對新的變化進行進一步的瞭解。