Win10 UWP开发系列:解决Win10不一样版本的Style差别致使的兼容性问题

最近在开发一个项目时,遇到了一个奇怪的问题,项目依赖的最低版本是10586,目标版本是14393,开发完毕发布到商店后,不少用户报没法正常加载页面。经查,有问题的都是Win10 10586版本。windows

 

我上篇博客中写到的自定义的AppBar控件,也存在这个问题,10586会报错。app

 

为此特地下载了10586的SDK调试。错误显示,一个样式找不到,名为ListViewItemBackground。由于开发的时候是基于14393的,有多是14393的SDK中默认有该样式,但10586没有。插件

 

首先找到如下目录:调试

C:\Program Files (x86)\Windows Kits\10\DesignTime\CommonConfiguration\Neutral\UAPblog

能够看到里面有如下三个目录:ci

image

这就是三个不一样版本的Win10。依次打开里面的Generic目录,里面的generic.xaml就是默认的样式文件。为了比较三个版本不一样的区别,使用VS Code的同窗能够安装这个插件:资源

image

安装完毕后,reload一下,把三个版本的generic.xaml拖进来,在第一个要比较的文件上右键单击选择Mark 1st file,在第二个文件上右键单击选择Mark 2nd file,就能够进行比较了。开发

 

首先查找ListViewItemBackground这个值,发现14393里是有这个属性的,但10586没有,找不到这个值就报错了:get

image

能够看到,差别仍是比较大的。博客

 

至于自定义的AppBar的问题,是由于我从14393的样式里复制出来的模板,是这样的:

image

 

而在10586中,AppBar的模板是这样的:

image

但在14393中,其实跟10586的值是同样的:

image

也就是说,14393里把一些资源从新起了个名。传说中的微软更名部再次立功了。

再比较一下14393和15063,能够发现也有一些小改动:

image

因此若是要用到这些样式的时候,必定要确认在不一样版本中的默认样式中是存在的,不然就会找不到资源而报错。

 

那如何解决这个问题?一种方案使,将14393的默认样式中10586里不存在的那部分复制到项目中。可是若是使用了自定义控件,仍然有可能会发现莫名其妙的错误,好比有些控件的模板使用了只有14393才支持的属性,能够参考这几个文章:

http://stackoverflow.com/questions/40397909/templatebinding-used-after-must-be-a-markup-extension-error-on-uwp-gridvi

https://social.msdn.microsoft.com/Forums/windowsapps/en-US/af308462-59b3-4ec6-9640-f0a3c5956004/uwptemplatebinding-used-after-must-be-a-markup-extension-error-on-uwp-gridview?forum=wpdevelop

因此保险起见,项目最低版本改为14393就好了。须要注意的是,15063的样式仍然有改动,若是自定义了模板的话还须要考虑兼容性。

相关文章
相关标签/搜索