About Windows 10 SDK Preview Build 17110
在 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. 进度条
在某些场景,例如下载或其他过程进行时,需要在通知中显示进度条,让用户可以保持对进度的关注。进度条可以是不确定的或者确定的,
Design samples
Fluent Design 的演示 Sample - BuildCast 已经加入到 Design toolkits and samples 页面。展示了 Fluent Design 系统和 UWP 其他的功能。
BuildCast sample 也在 GitHub 开源:
另外下列的工具箱都提供了控件和模板供 UWP 设计使用:
Embedded handwriting
文本控件加入了触控笔的支持,目前在 Windows 预览版系统中支持,用户可以使用触控笔直接在 TextBox,RichTextBox 和 AutoSuggestBox 控件中使用 Windows Ink 进行书写。在用户书写后,根据手写笔记转换成对应的文字,并保留手写的痕迹。
大家可以在 Microsoft Store 下载 XAML Controls Gallery 应用来查看 TextBox 手写的 Demo,或者在 GitHub 下载 来查看控件的使用 Sample。
来看看内置手写的官方演示:
用户可以在文本控件中任何位置进行书写,在候选窗口中识别出手写的结果并给用户推荐使用。用户可以选择一个结果,或在接受结果后继续书写。识别结果是逐个字母来识别的,所以识别结果不限于字典中的单词。在用户书写后,根据手写笔记转换成对应的文字,并保留手写的痕迹。
用户可以使用标准手势和操作来编辑文字:
- 穿过或划掉 -- 穿过的动作去删除一个词或词的一部分
- 连接 -- 在词之间画一个弧形来删除词之间的空格
- 插入 -- 画一个插入符号可以插入一个空格
- 重写 -- 在现有文字上书写可以替换它
应用目标版本为 1803 或更新时才可以使用嵌入手写输入。把 IsHandwritingViewEnabled 属性设置为 false 可以禁用这个功能。
嵌入手写输入对于触屏设备会非常的方便易用,也会避免虚拟键盘操作的不方便。让触控笔的操作更加真实化,提高书写效率和体验。
Navigation view
Navigation View 控件提供了一个可收起的导航菜单作为 App 里的*导航,它实现自 nav pane 或 hamburger menu,可以针对不同的窗体尺寸自适应 pane 的显示模式。
微软推荐在以下场景使用 Navigation View:
- 存在同一类型多个*导航元素,例如一个体育类 App 中包含不同的体育项目
- 5-10 个*导航分类的场景
- 提供一个易用的导航体验,容器中仅包含导航元素,不包含任何操作
- 在小窗口时保留屏幕真实的观感
如果想了解更多关于导航的模式和基础概念,可以看这里:
NavigationView 控件有很多的内置行为实现自简单的 nav pane 模式。如果大家想要更多复杂的行为而 NavigationView 不支持,可以尝试 Master/Detail 模式。
大家可以在 Microsoft Store 下载 XAML Controls Gallery 应用来查看 NavigationView 的 Demo,或者在 GitHub 下载 来查看控件的使用 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
如果大家对 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
一种可以让开发者以更通用和统一的方式来对卡片对展示和交互的方式。
详情见
App Resource Group
AppResourceGroupInfo 提供了新的方法,让用户可以发起过渡状态,让 App 进入暂停,激活和终止状态。
对应的方法名分别:
- StartResumeAsync() -- 发起状态变化,让 App 变为激活状态;
- StartSuspendAsync() -- 发起状态变化,让 App 变为暂停状态;
- StartTerminateAsync() -- 发起状态变化,让 App 变为终止状态;
Broad file-system access
broadFileSystemAccess 能力允许应用访问文件系统,在不使用 filepicker 的前提下。需要在 Manifest 的 capability 中进行设置。
Console UWP apps
开发者可以使用 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, 地址:
下载模板后,就可以使用 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 可用列表:
Machine Learning
千呼万唤始出来的 Windows AI Platform 和 Windows Machine Learning。
详情见
Multi-instance UWP apps
UWP App 可以通过配置来支持多实例,如果一个实例正在运行,一个运行的请求发过来,平台不会激活目前存在的实例,而是会创建一个新的实例,运行在一个单独的进程中,这个特性在 1803 版本开始被支持。
同样的,多实例特性需要在 Visual Studio 中安装新的项目模板:, 安装后,使用 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 是一个很有前景的平台,有兴趣的开发者可以在 获取更多信息。
应用发布和盈利
Enter free-form prices in a specific market's local currency
当开发者针对某个特性市场重新制定 App 的价格时,不再局限于标准的价格选择,而是可以选择自己输入特定的价格数值。
目前的 17110 SDK 重点大致就是这些了,等 SDK 正式发布后,我们会再针对新的变化进行进一步的了解。
下一篇: 银耳产地在哪里?好的银耳要怎么选?