目录

引言

设备族群

UI 和通用输入模式

  • 通用控件和布局面板
  • 工具
  • 自适应扩展
  • 通用输入处理

引言

在本篇文章中,可以掌握以下知识:

  • 设备族群,如何决定目标设备
  • 新的UI控件和新面板帮助你适应不同的设备特征

从Windows 8系统开始,微软就 引入了WindowsRT(Windows Runtime),它是Windows App 模型的一个中间阶段。希望能够成为通用应用体系架构。

Windows Phone 8.1发布时,也兼容WRT 。这样有助开发者使用同一代码库创建通用的Windows8 app。

将近三年之后,微软的重头产品Windows 10终于横空出世。Windows 10 开始引入 UWP,更进一步的发展了Windows RunTime 模型,并将WRT 引入了Windows10 内核中。作为系统内核的一部分,UWP 现在提供创建通用的App平台(即App在运行Windows10的所有设备中都可以运行),当然微软内部也做出了改进,UWP 不仅包含了WinRT API,也增加了适应特定设备群的API。UWP 为开发跨设备App提供了可靠的API 层。这就意味着你只需要开发一次,就可在多种设备中运行。并发布到Windows Store,所有的用户都可以下载试用。

无论设备的形式和输入模态的不同,UWP 都可以运行,也可以为特殊设备定制。自适应UI控件和新的布局Panel 有助于解决设备屏幕尺寸的多样性。

设备族群

Windows8.1 和Windows Phone 8.1 App 还存在操作系统的差异,无论是Windows和Windows Phone。有了Windows 10就不需要将所有的开发精力都集中在操作系统,但需要解决一个或多设备特征。设备族群可以识别API,系统特征,以及用户行为,也决定了可运行某一App的设备集。

设备族群是搜集的带有版本号和标识符的API集合,设备族群是OS的基础,PC 机运行桌面操作系统,是根据桌面设备族群决定的,智能手机和平板电脑等会运行Mobile OS,是由移动设备族群决定的,等等。

通用设备族群相对而言比较特殊,它不是任何OS 的基础,相反,通用设备族群的API是所有族群的父节点,正因为有了通用设备族群API才保证了每个OS 能够正常呈现到每种设备中。

每个子设备族群在通用族群基础上添加自有的API。使用设备族群的优点在于开发一次,到处运行,无论用户使用哪种设备,手机,平板或PC。App可使用自适应代码实现动态获取设备特征,适应设备。

你的App需要使用哪种设备族群,主要取决开发需求,并且决定影响最终App的呈现:

1. API 集,App运行时需要调用的API

2. API集调用

3. 适应的设备集,即App能够安装的设备类型。

选择设备族群主要由两方面原因决定,API 接口类型,是否创建App时能够无条件调用,以及App需要覆盖的设备范围。

如何做决策:

  • 最大化App 覆盖量
  • 为了实现App 覆盖设备的最大化,保证它能够在尽可能多的设备中运行,可把App目标定位通用设备族群。这样做的目的,App会就可以使用所有设备族群,(从通用设备族群派生的)
  • 限制App 适应某一种设备
  • 限制App适应某一类设备
  • 排除只支持某一特殊版本的设备族群

UI 和通用输入

UWP  App能够在具有不同特征的设备中运行。Windows10 提供新的通用控件,布局面板和工具,来帮助开发自适应UI 。例如根据不同的屏幕分辨率,相应的调节UI。

Windows 帮助你实现自适应UI:

1. 提供通用控件和布局面板来根据屏幕分辨率来优化UI

2. 常用输入处理,可解决输入模态多样性的问题,无论通过触摸输入,触摸笔,键盘,还是控制器,都能够统一处理。

3.提供UI 设计辅助工具,能够自适应不同的屏幕分辨率。

4. 自适应扩展可调节分辨率和DPI。

通用控制和布局板

Windows 10 提供了一些新控件,比如日历,拆分视图,在此之前,只有Winodws Phone 提供Pivot 控件 ,现在,通用设备族群也支持Pivot控件。而且控件也做了相应的调整,能够适应大尺寸屏幕。

使用自适应Panels实现自适应界面

Layout Panel 指定子元素的尺寸和位置的值主要取决于屏幕尺寸,比如StackPanel 会指定子节点顺序排放(垂直或水平)。Grid 与CSS 提供的Grid相似,每个界面元素都对应单元格。

新提供的RelativePanel 是一种布局样式,可以定义各界面元素之间的关系,当屏幕分辨率发生变化时,界面元素会做出相应的调整来适应。RelativePanel能够减少由于元素重新排列导致的一些性能问题。

如下,无论是横向和纵向的,蓝色按钮始终在Texbox1的右边,橙色按钮会放在蓝色按钮下方。

XAML

<RelativePanel>
<TextBox x:Name="textBox1" Text="textbox" Margin="5"/>
<Button x:Name="blueButton" Margin="5" Background="LightBlue" Content="ButtonRight" RelativePanel.RightOf="textBox1"/>
<Button x:Name="orangeButton" Margin="5" Background="Orange" Content="ButtonBelow" RelativePanel.RightOf="textBox1" RelativePanel.Below="blueButton"/>
</RelativePanel> 在学习完本文之后,我们对UWP平台已经有了基本理解。在进行UWP平台的开发时,还可以借助一些开发工具。ComponentOne Studio for UWP是一套可以编写所有 UWP 平台应用的控件集,包括表格、报表、图表、仪表盘、组织图、地图、PDF、Excel、Word、日程安排、输入、导航等多个控件,有效的帮助开发过程。

相关阅读:

微软 Build 2017 开发者大会:Azure 与 AI 的快速发展

是什么让C#成为最值得学习的编程语言

从Visual Studio看微软20年技术变迁

C#开发人员应该知道的13件事情

Visual Studio 2017正式版发布全纪录

UWP入门教程1——UWP的前世今生的更多相关文章

  1. UWP 入门教程2——如何实现自适应用户界面

    系列文章 UWP入门教程1——UWP的前世今生 如上文所说的,布局面板根据可用的屏幕空间,指定界面元素的大小和位置.例如StackPanel 会水平或垂直排列界面元素.Grid 布局与CSS 中的表格 ...

  2. UWP 新手教程1——UWP的前世今生

    文件夹 引言 设备族群 UI 和通用输入模式 通用控件和布局面板 工具 自适应扩展 通用输入处理 引言 在本篇文章中,可以掌握下面知识: 设备族群,怎样决定目标设备 新的UI控件和新面板帮助你适应不同 ...

  3. UWP 新手教程2——怎样实现自适应用户界面

    系列文章 UWP新手教程1--UWP的前世今生 如上文所说的,布局面板依据可用的屏幕空间.指定界面元素的大小和位置. 比如StackPanel 会水平或垂直排列界面元素.Grid 布局与CSS 中的表 ...

  4. win10 uwp 入门

    UWP是什么我在这里就不说,本文主要是介绍如何入门UWP,也是合并我写的博客. 关于UWP介绍可以参见:http://lib.csdn.net/article/csharp/32451 首先需要申请一 ...

  5. UWP入门(十二)--数据绑定用法

    原文:UWP入门(十二)--数据绑定用法 主要几个元素: Template DataTemplate ItemSource 数据绑定是一个数据提取的方法,能使数据和UI上的控件紧密相连,下面的Demo ...

  6. UWP入门(十)--获取文件属性

    原文:UWP入门(十)--获取文件属性 重要的 API StorageFile.GetBasicPropertiesAsync StorageFile.Properties StorageItemCo ...

  7. UWP入门(九)-- 枚举和查询文件和文件夹

    原文:UWP入门(九)-- 枚举和查询文件和文件夹 核心 API 所在的命名空间: Windows.Storage Windows.Storage.Streams Windows.Storage.Pi ...

  8. UWP入门(八)--几个简单的控件

    原文:UWP入门(八)--几个简单的控件 每天看几个,要不聊几天我就可以看完啦,加油! 看效果 1. CheckBox <TextBlock Grid.Row="0" Tex ...

  9. UWP入门(七)--SplitView详解与页面跳转

    原文:UWP入门(七)--SplitView详解与页面跳转 官方文档,逼着自己用英文看,UWP开发离不开官方文档 1. SplitView 拆分视图控件 拆分视图控件具有一个可展开/可折叠的窗格和一个 ...

随机推荐

  1. Rails中用CSV导出中文真心有技巧

    require 'csv' class PartRequestsController < ApplicationController def render_csv_header(filename ...

  2. JSNO

    JSON 编辑 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于ECMAScript的一个子集. JSON采用完全独立于语言的文本格式,但是也使用了 ...

  3. Unity将来时:IL2CPP是什么?

    作者:小玉链接:https://zhuanlan.zhihu.com/p/19972689来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. Unity3D 想必大家都不陌 ...

  4. Android开机启动Activity或者Service方法

    本文出自 “Bill_Hoo专栏” 博客,请务必保留此出处http://billhoo.blog.51cto.com/2337751/761230 这段时间在做Android的基础开发,现在有一需求是 ...

  5. 编译器错误信息: CS0433: 类型“ASP.usercontrols_total_ascx”同时存在

    “/”应用程序中的服务器错误. 编译错误 说明: 在编译向该请求提供服务所需资源的过程中出现错误.请检查下列特定错误详细信息并适当地修改源代码. 编译器错误信息: CS0433: 类型“ASP.use ...

  6. overview

    [1] Don’t panic! All will become clear in time; [2] You don’t have to know every detail of C++ to wr ...

  7. [转]Android开发:Parallax效果的ScrollerView,改编自ParallaxListView

    https://github.com/nirhart/ParallaxScroll这个gethub上的地址 本文转自http://www.2cto.com/kf/201502/376970.html ...

  8. Hyper-V初涉_虚拟磁盘链错误的解决方案

    当Hyper-V管理器对虚拟机创建了快照,在Hyper-V虚拟机设置中会看到如下图提示.简单的说,就是创建了快照的虚拟机将不能继续进行编辑. 如果,在对虚拟机的主虚拟磁盘进行了编辑,哪怕仅仅是在Win ...

  9. strncpy和memcpy的区别

    今天不小心在该用memcpy的时候,用了strncpy使自己吃了亏,所以写出这个博文. memcpy就是纯字节拷贝,而strncpy就不同了,字符串是以'\0'结尾的.如果一个字符buffer长度为6 ...

  10. Android中<original-package>标签含义

    在AndroidManifest.xml中,<original-package>与<manifest package=...>中的区别:<original-package ...