UWP 新手教程2——怎样实现自适应用户界面
系列文章
如上文所说的,布局面板依据可用的屏幕空间。指定界面元素的大小和位置。
比如StackPanel 会水平或垂直排列界面元素。Grid 布局与CSS 中的表格控件相似。可将各元素按单元排列。
新提供的 RelativePanel 即相对布局。各个元素之间存在相对关系,可用来创建自适应界面。当用户设备发生变化时,用户界面也会又一次排列又一次组织,而有了RelativePanel就省去了界面元素又一次排列。
如图所看到的,不管用户使用哪种设备。蓝色button始终放在文本框右側,并排放在黄色button顶部。

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>
使用可视化状态触发器创建自适应UI
UWP 提供自适应可视化状态,可依据窗体大小来调整状态值。StateTriggers定义了一个阈值,达到阈值则触发可视化状态。下面演示样例了。当窗体大于720像素。wideView 状态则被触发,游戏面板又一次排列,如图所看到的:

当窗体小于720px。则narrowView视态被触发,由于wideView 触发器无法满足条件,NarrowView 状态则将Best-rated games 置于最底端。而且向左对齐,效果图例如以下:
XAML 代码例如以下:
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<VisualStateManager.VisualStateGroups>
<VisualStateGroup>
<VisualState x:Name="wideView">
<VisualState.StateTriggers>
<AdaptiveTrigger MinWindowWidth="720" />
</VisualState.StateTriggers>
<VisualState.Setters>
<Setter Target="best.(RelativePanel.RightOf)" Value="free"/>
<Setter Target="best.(RelativePanel.AlignTopWidth)" Value="free"/>
</VisualState.Setters>
</VisualState>
<VisualState x:Name="narrowView">
<VisualState.Setters>
<Setter Target="best.(RelativePanel.Below)" Value="paid"/>
<Setter Target="best.(RelativePanel.AlignLeftWithPanel)" Value="true"/>
</VisualState.Setters>
<VisualState.StateTriggers>
<AdaptiveTrigger MinWindowWidth="0" />
</VisualState.StateTriggers>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
...
</Grid>
创建UWP可使用的工具
创建App时。一般会明白目标设备,当须要在设备中预览App,能够使用VS中的Preview toolbar(预览工具箱)查看App,能够模拟不同的设备。如PC。TV,智能手机等。

自适应扩展
Windows 10 引入“缩放模型”的升级版,除了缩放矢量图之外。有一个统一的缩放因子集合,能够保证UI元素在不同的屏幕尺寸和分辨率下。界面元素大小的一致性。缩放因子能够兼容多种操作系统如iOS,Android等,资源科跨多平台共享。
通用输入处理
可使用通用控件创建通用Windows App来管理控制不同的输入模式,如鼠标,键盘。触摸笔,控制器等。
本文列举了下面API 来訪问输入:
CoreIndependentInputSource:是新添加的API。可将源输入,迁移到主线程或后台线程。
PointerPoint:统一了触摸,鼠标,笔数据。具有一致的接口和事件。
PointerDevice:是设备API,可支持查询设备支持的输入能力。
新的 InkCanvas XAML 控件和InkPresenter API 可訪问Stroke 数据
编写代码
VS中开发Windows10 项目支持多种开发语言。如C++,C#,VB以及JavaScript。也能够使用XAML,开发原生UI 用户体验。
调用API来实现目标设备族群
不管须要调用哪种API。你须要了解API适应的设备族群,是否满足您App开发的须要。例如以下面代码所看到的,设备族群是Universal:
Windows.UI.Core.SystemNavigationManager.GetForCurrentView().BackRequested += TestView_BackRequested;
当然也能够调用API ,在App中不实现。
这样的情况通常指当你的目标设备族群未在文档中标明,你能够调用此api,改动一些代码就可以。
使用ApiInformation 类编写自适应代码
编写自适应代码仅仅须要两步,一。确定须要调用的API。二,使用Windows.Foundation.Metadata.ApiInformation 类来測试API 。
可用于评估App是否执行良好。
假设想同一时候调用非常多API,能够使用ApiInformation.IsTypePresent 方法,例如以下:
// Note: Cache the value instead of querying it more than once.
bool isHardwareButtonsAPIPresent =
Windows.Foundation.Metadata.ApiInformation.IsTypePresent("Windows.Phone.UI.Input.HardwareButtons");
if (isHardwareButtonsAPIPresent)
{
Windows.Phone.UI.Input.HardwareButtons.CameraPressed +=
HardwareButtons_CameraPressed;
}
上述演示样例中HardwareButtons类实现了CameraPressed事件。由于该类成员有同样的信息需求。
用户体验
通用Windows App 可利用全部设备特征来呈现App.App可充分利用桌面设备的处理能力,平板电脑的自然交互方式,以及智能手机的便捷性和移动性等。
良好的设计从确定用户交互方式開始,同一时候满足App的功能性和外观。
用户体验非常重要直接影响了用户是否喜欢你的App,使用过程中是否愉悦或始终保持积极的情绪。而不受阻碍。
设计通用App更加须要注意影响用户体验的不同设备因素。

除了设备的交互方式不同,还须要利用跨平台的长处,如:
- 使用云计算来訪问不同设备资源
- 考虑如何支持从一种设备迁移到还有一种设备之上,并保持一致性。
- 使用导航设计指南来设计工作流程,使得App可兼容移动设备,较小的屏幕或较大的屏幕设备。
- 考虑特殊情况,较小的移动设备屏幕失效,也可能有一些功能区在固定式台式机上不起作用,而需在移动设备上才干执行。
- 考虑如何兼容多种输入形式
通过Dashboard提交通用 Windows 应用
利用新的通用的 Windows 开发者中心仪表板。能够在同一位置管理和提交全部面向 Windows 设备的应用。新功能简化了流程。并具有很多其它的控制权限。
在进行UWP开发时,还能够借助一些开发工具,有效提高开发效率。
ComponentOne Studio for UWP 是一套能够编写全部 UWP 平台应用的控件集,包含表格、报表、图表、仪表盘、组织图、地图、PDF、Excel、Word、日程安排、输入、导航等多个控件,有效的帮助开发过程。
UWP 新手教程2——怎样实现自适应用户界面的更多相关文章
- UWP 入门教程2——如何实现自适应用户界面
系列文章 UWP入门教程1——UWP的前世今生 如上文所说的,布局面板根据可用的屏幕空间,指定界面元素的大小和位置.例如StackPanel 会水平或垂直排列界面元素.Grid 布局与CSS 中的表格 ...
- UWP 新手教程1——UWP的前世今生
文件夹 引言 设备族群 UI 和通用输入模式 通用控件和布局面板 工具 自适应扩展 通用输入处理 引言 在本篇文章中,可以掌握下面知识: 设备族群,怎样决定目标设备 新的UI控件和新面板帮助你适应不同 ...
- 【OpenCV十六新手教程】OpenCV角检测Harris角点检测
本系列文章由@浅墨_毛星云 出品.转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/29356187 作者:毛星云(浅墨) ...
- Android基础新手教程——3.1 基于监听的事件处理机制
Android基础新手教程--3.1.1 基于监听的事件处理机制 标签(空格分隔): Android基础新手教程 本节引言: 第二章我们学习的是Android的UI控件,我们能够利用这些控件构成一个精 ...
- Android基础新手教程——4.1.1 Activity初学乍练
Android基础新手教程--4.1.1 Activity初学乍练 标签(空格分隔): Android基础新手教程 本节引言: 本节開始解说Android的四大组件之中的一个的Activity(活动) ...
- Android基础新手教程——1.2.1 使用Eclipse + ADT + SDK开发Android APP
Android基础新手教程--1.2.1 使用Eclipse + ADT + SDK开发Android APP 标签(空格分隔): Android基础新手教程 1.前言 这里我们有两条路能够选,直接使 ...
- Web项目的发布新手教程
ASP.NET服务器发布新手教程 ——本文仅赠予第一次做Web项目,需要发布的新手们,转载的请注明出处. 首先我们说一下我们的需要的一个环境.我使用的是Visual Studio 2010,版本.NE ...
- APP设计尺寸规范大全,APP界面设计新手教程【官方版】(转)
正值25学堂一周年之际,同时站长和APP设计同仁们在群里(APP界面设计 UI设计交流群,APP界面设计⑥群 APPUI设计③群58946771 APP设计资源⑤群 386032923欢迎大家加入交流 ...
- ROS探索总结(三)——ROS新手教程【转】
转自:http://blog.csdn.net/hcx25909/article/details/8811313 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[-] 一ROS的 ...
随机推荐
- 解决php7.3 configure: error: off_t undefined
//解决该问题:php7.3 configure: error: off_t undefined; check your library configuration # 添加搜索路径到配置文件echo ...
- go的相关用法
1. have gone to和have been to的区别 have gone to和have been to的区别如下: 1.have gone to,第三人称时用 has gone to ha ...
- 自动化运维之shell通配符,转义符,和元字符(二)
1 shell通配符 通配符看起来有点象正则表达式语句,但是它与正则表达式不同的,不能相互混淆.把通配符理解为shell特殊代号字符就可. 二.shell元字符 shell除了有通配符之外,由shel ...
- window.location.href跳转问题
任务中遇到这样一个问题,用window.location.href跳转一到个网址,但是每次都出错,显示网址前面加上了文件所在文件夹的路径 示例如下: window.location.href=&quo ...
- 【最优K叉树】hdu 5884 Sort
http://acm.hdu.edu.cn/showproblem.php?pid=5884 参考:https://www.cnblogs.com/jhz033/p/5879452.html [题意] ...
- BZOJ 4808 马 二分图最大独立集
题目应该就是最大独立集了吧,没什么了,平面图求最大独立集需要/2的, WQH说加直接+双向边考研过,结果真的过了,应该是匈牙利算法寻找的 时候更加快了吧.(方便找边) #include<cstd ...
- python模块(二)
一.json模块 作用: 用于[字符串]和 [python基本数据类型] 间进行转换 Python的Json模块序列化与反序列化的过程分别是 encoding和 decoding. encoding ...
- iOS7中Cell高度 Label高度自适应
- (float)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{ NSStr ...
- hdu2448 / 费用流 / harbin赛区c题
题(自)目(己)错(英)综(语)复(太)杂(差),关系理了半小时+翻译才看明白,看明白之后,直接建图,费用流击杀./简单题. 2A:有的地方,可用互通的要建双向边! #include<cstdi ...
- 汉若塔系列续:汉诺塔VIII、汉诺塔IX、汉诺塔X。
汉诺塔VIII,在经典汉若塔问题上,问n个盘子的情况下,移动m次以后,是什么状态.(与第七代互为逆命题) 我的思路:本质还是dfs,但是用m的值来指引方向,每搜一层确定第i个盘子在哪个塔,o(n)的算 ...