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的樣式仍然有改動,若是自定義了模板的話還須要考慮兼容性。

相關文章
相關標籤/搜索