系列文章html
如上文所说的,布局面板根据可用的屏幕空间,指定界面元素的大小和位置。例如StackPanel 会水平或垂直排列界面元素。Grid 布局与CSS 中的表格控件相似,可将各元素按单元排列。api
新提供的 RelativePanel 即相对布局,各个元素之间存在相对关系,可用来建立自适应界面。当用户设备发生变化时,用户界面也会从新排列从新组织,而有了RelativePanel就省去了界面元素从新排列。编程语言
如图所示,不管用户使用哪一种设备,蓝色按钮始终放在文本框右侧,并排放在黄色按钮顶部。ide
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 提供自适应可视化状态,可根据窗口大小来调整状态值。StateTriggers定义了一个阈值,达到阈值则触发可视化状态。下面示例了,当窗口大于720像素,wideView 状态则被触发,游戏面板从新排列,如图所示:post
当窗口小于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>
建立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更加须要注意影响用户体验的不一样设备因素。
除了设备的交互方式不一样,还须要利用跨平台的优势,如:
利用新的通用的 Windows 开发人员中心仪表板,能够在同一位置管理和提交全部面向 Windows 设备的应用。新功能简化了流程,并具备更多的控制权限。
在进行UWP开发时,还能够借助一些开发工具,有效提升开发效率。ComponentOne Studio for UWP 是一套能够编写全部 UWP 平台应用的控件集,包括表格、报表、图表、仪表盘、组织图、地图、PDF、Excel、Word、日程安排、输入、导航等多个控件,有效的帮助开发过程。
相关阅读: