Win10 UWP开发系列:解决Win10不同版本的Style差异导致的兼容性问题
最近在開發(fā)一個(gè)項(xiàng)目時(shí),遇到了一個(gè)奇怪的問題,項(xiàng)目依賴的最低版本是10586,目標(biāo)版本是14393,開發(fā)完畢發(fā)布到商店后,很多用戶報(bào)無法正常加載頁(yè)面。經(jīng)查,有問題的都是Win10 10586版本。
?
我上篇博客中寫到的自定義的AppBar控件,也存在這個(gè)問題,10586會(huì)報(bào)錯(cuò)。
?
為此特意下載了10586的SDK調(diào)試。錯(cuò)誤顯示,一個(gè)樣式找不到,名為L(zhǎng)istViewItemBackground。因?yàn)殚_發(fā)的時(shí)候是基于14393的,有可能是14393的SDK中默認(rèn)有該樣式,但10586沒有。
?
首先找到以下目錄:
C:\Program Files (x86)\Windows Kits\10\DesignTime\CommonConfiguration\Neutral\UAP
可以看到里面有以下三個(gè)目錄:
這就是三個(gè)不同版本的Win10。依次打開里面的Generic目錄,里面的generic.xaml就是默認(rèn)的樣式文件。為了比較三個(gè)版本不同的區(qū)別,使用VS Code的同學(xué)可以安裝這個(gè)插件:
安裝完畢后,reload一下,把三個(gè)版本的generic.xaml拖進(jìn)來,在第一個(gè)要比較的文件上右鍵單擊選擇Mark 1st file,在第二個(gè)文件上右鍵單擊選擇Mark 2nd file,就可以進(jìn)行比較了。
?
首先查找ListViewItemBackground這個(gè)值,發(fā)現(xiàn)14393里是有這個(gè)屬性的,但10586沒有,找不到這個(gè)值就報(bào)錯(cuò)了:
可以看到,差異還是比較大的。
?
至于自定義的AppBar的問題,是因?yàn)槲覐?4393的樣式里復(fù)制出來的模板,是這樣的:
?
而在10586中,AppBar的模板是這樣的:
但在14393中,其實(shí)跟10586的值是一樣的:
也就是說,14393里把一些資源重新起了個(gè)名。傳說中的微軟改名部再次立功了。
再比較一下14393和15063,可以發(fā)現(xiàn)也有一些小改動(dòng):
所以如果要用到這些樣式的時(shí)候,一定要確認(rèn)在不同版本中的默認(rèn)樣式中是存在的,否則就會(huì)找不到資源而報(bào)錯(cuò)。
?
那如何解決這個(gè)問題?一種方案使,將14393的默認(rèn)樣式中10586里不存在的那部分復(fù)制到項(xiàng)目中。但是如果使用了自定義控件,仍然有可能會(huì)發(fā)現(xiàn)莫名其妙的錯(cuò)誤,比如有些控件的模板使用了只有14393才支持的屬性,可以參考這幾個(gè)文章:
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
所以保險(xiǎn)起見,項(xiàng)目最低版本改成14393就行了。需要注意的是,15063的樣式仍然有改動(dòng),如果自定義了模板的話還需要考慮兼容性。
?
總結(jié)
以上是生活随笔為你收集整理的Win10 UWP开发系列:解决Win10不同版本的Style差异导致的兼容性问题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java基础_数组常用算法
- 下一篇: 一张图说明Linux启动过程