Windows 10通用应用程序针对特定的平台还会有一个子API的集合,当咱们要使用到某个平台的特定API的时候(好比手机相机硬件按钮触发事件),这时候就须要调用特定平台的API。由于Windows 10应用程序是一个安装包能够部署到全部的Windows 10系统平台的,因此这里就涉及到一个API适配的问题,对特定平台的API进行特殊处理。除了特定平台的API以外,还有一个适配的工做就是界面的适配,Windows 10也提供了一系列的API来给咱们作界面的适配工做。html
目前在Windows 10里面有Windows Mobile Extension SDK和Windows Desktop Extension SDK两个扩展的SDK分别表示手机版本和桌面版本的扩展SDK,在书本的后面章节里面有用到特定平台的API都会进行区分标识。这两个SDK都是直接内置在Windows 10的开发SDK里面的,可是默认状况下不会给项目工程添加上,须要使用能够在项目工程里面进行引用,路径为(Project > Add Reference >Windows Universal > Extensions)。在使用特定平台的API的时候,必需要进行判断当前的环境是否支持使用,不然不支持的平台调用将会引起异常。判断的方法为Windows.Foundation.Metadata.ApiInformation.IsTypePresent(String typeName),typeName表示带完整的命名空间的API的名称,返回true表示支持,返回false表示不支持。下面经过一个手机硬件后退键的适配来演示一下若是使用和适配特定平台的API。编程
首先建立一个Windows 10的通用应用程序项目,命名为BackButtonDemo,在项目里面引用Windows Mobile Extension SDK,如图2.12所示。微信
打开App.xaml.cs文件添加下面的代码:布局
代码清单2-2:适配手机后退按钮(源代码:第2章\Examples_2_2)测试
App.xaml.cs文件部分代码 ------------------------------------------------------------------------------------------------------------------ // 是否支持硬件后退键的标识 public static bool IsHardwareButtonsAPIPresent; public App() { this.InitializeComponent(); this.Suspending += OnSuspending; // 判断当前是否支持硬件后退键 IsHardwareButtonsAPIPresent = Windows.Foundation.Metadata.ApiInformation.IsTypePresent("Windows.Phone.UI.Input.HardwareButtons"); if (IsHardwareButtonsAPIPresent) // 添加后退键事件 Windows.Phone.UI.Input.HardwareButtons.BackPressed += HardwareButtons_BackPressed; } } // 后退键事件,若是能够返回上一个页面则返回上一个页面 private void HardwareButtons_BackPressed(object sender, BackPressedEventArgs e) { Frame frame = Window.Current.Content as Frame; if (frame == null) { return; } if (frame.CanGoBack) { frame.GoBack(); e.Handled = true; } }
在项目中添加一个新的XAML页面BlankPage.xaml,如图2.13所示,在页面中增长顶部的后退按钮和隐藏显示逻辑,代码以下所示:this
BlankPage.xaml文件部分代码 ------------------------------------------------------------------------------------------------------------------ <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> <StackPanel VerticalAlignment="Top" Orientation="Horizontal"> <Button x:Name="backButton" Margin="24,24,24,24" Click="backButton_Click" Style="{StaticResource NavigationBackButtonNormalStyle}"/> <TextBlock Text="你好" FontSize="30" HorizontalAlignment="Left" VerticalAlignment="Center"></TextBlock> </StackPanel> </Grid>
BlankPage.xaml.cs文件部分代码 ------------------------------------------------------------------------------------------------------------------ public BlankPage1() { this.InitializeComponent(); if(App.IsHardwareButtonsAPIPresent) { backButton.Visibility = Visibility.Collapsed; } else { backButton.Visibility = Visibility.Visible; } } // 后退按钮处理 private void backButton_Click(object sender, RoutedEventArgs e) { if(this.Frame.CanGoBack) { // 返回上一个页面 this.Frame.GoBack(); } }
打开MainPage.xaml页面添加转到至BlankPage.xaml页面的逻辑,代码以下所示:spa
MainPage.xaml文件部分代码 ------------------------------------------------------------------------------------------------------------------ <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> <Button Content="跳转到新的页面" Click="Button_Click" VerticalAlignment="Center" HorizontalAlignment="Center"></Button> </Grid>
MainPage.xaml.cs文件部分代码 ------------------------------------------------------------------------------------------------------------------ private void Button_Click(object sender, RoutedEventArgs e) { // 从MainPage页面跳转到BlankPage1页面 this.Frame.Navigate(typeof(BlankPage1)); }
把程序部署到手机模拟器上,能够看到BlankPage.xaml页面顶部的后退按钮隐藏掉了,硬件后退键接管了后退的操做,如图2.1四、2.15所示。把程序部署到本地PC上,能够看到BlankPage.xaml页面顶部的后退按钮显示出来了,如图2.1六、2.17所示。设计
Windows 10系统支持多种硬件平台和分辨率,Windows 10系统底层对界面的适配也是很是强大的,一样的控件在不一样的硬件平台上显示也可能会有差别,这种适配就是由Windows 10 系统本身来完成适配,来匹配不一样的硬件和分辨率的显示效果。虽然Windows 10底层完成了各类控件的适配,可是不少时候仍是须要咱们在程序里面来实现适配的。咱们在开发通用程序的时候要充分地考虑到各类不一样分辨率下的显示效果,能够经过可视化设计界面和各类分辨率的模拟器来进行测试。适配界面有几种经常使用的编程技巧(1)使用相对的布局控件来进行排列,如Grid、RelativePanel等;(2)使用相对的属性来设置控件在容器的位置,如orizontalAlignment、VerticalAlignment属性;(3)设置长度宽度的最大值最小值限制;(4)根据设备实际分辨率来设置长度宽度或者位置。详细的界面适配编程知识将会在布局的章节进行讲解。3d
本文来源于《深刻浅出Windows 10通用应用开发》code
源代码下载:http://vdisk.weibo.com/u/2186322691
目录:http://www.cnblogs.com/linzheng/p/5021428.html
欢迎关注个人微博@WP林政 微信公众号:wp开发(号:wpkaifa)
Windows10/WP技术交流群:284783431