Windows Phone 资源管理与换肤思考
原文 Windows Phone 資源管理與換膚思考
新入手一臺Windows 8的筆記本,安裝了VS2013后,終于又可以開發(fā)WP了。公司暫時不愿意開發(fā)WP,那么咱就自行研究吧!
?
在沒有WP開發(fā)環(huán)境的時候,曾經(jīng)在WPF嘗試了一下?lián)Q膚功能的實現(xiàn)。最簡單的是在后臺修改需要更換樣式的控件的Style,然而這樣做工作量很大而且可拓展性也很差。總不可能添加一種主題皮膚,就在每個頁面寫一次Style的加載吧,工作量太大又容易出錯。
?
于是在MSDN上仔細(xì)閱讀了相關(guān)文檔,發(fā)現(xiàn)了DynamicResource拓展關(guān)鍵字。MSDN描述為“為任何 XAML 屬性特性提供值,該值將推遲為對已定義的資源的引用。 該資源的查找行為與運(yùn)行時查找類似。”什么意思呢,就是運(yùn)行時才加載改資源,并且鍵值對應(yīng)的資源修改時會同時更新UI控件的顯示。這不是正是我們要找的么!
于是用WPF做了的Demo,Demo里面有兩套模板,兩套模板都定義了一套相同鍵值的資源樣式(Style)。而頁面使用DynamicResource綁定對應(yīng)資源。切換兩套模板,實現(xiàn)皮膚更換。
blackStyle.xaml模板
<Style x:Key="bgGrid" TargetType="Grid"><Setter Property="Background"><Setter.Value><ImageBrush ImageSource="/Img/bgBlack.jpg" Stretch="Fill"/></Setter.Value></Setter></Style>WhiteStyle.xaml模板
<Style x:Key="bgGrid" TargetType="Grid"><Setter Property="Background"><Setter.Value><ImageBrush ImageSource="/Img/bgLight.jpg" Stretch="Fill"/></Setter.Value></Setter></Style>
切換應(yīng)用加載的資源實現(xiàn)換膚
如此,確實能實時更換皮膚。然而當(dāng)我配置好Windows Phone的開發(fā)環(huán)境時,卻發(fā)現(xiàn)這樣的方式在WPF行得通,而Windows Phone 上面卻行不通。且不說WP上沒有實現(xiàn)DynamicResource關(guān)鍵字,在執(zhí)行Application.Current.Resources.MergedDictionaries[1].Source = new Uri("/Common/BlackStyle.xaml", UriKind.Relative);這一句的時候更是提示了調(diào)用了Com組件的錯誤。好吧,WP的內(nèi)核是和WPF不同,所以不能這樣實現(xiàn)。但是動態(tài)資源DynamicResource確實是實現(xiàn)Xaml換膚的最好方式。
?
那么還有什么方法可以實現(xiàn)動態(tài)更換皮膚,并且可拓展性和可維護(hù)性又好呢?經(jīng)過一番思考之后,覺得附加屬性能夠?qū)崿F(xiàn)這樣的功能。附加一個StyleName屬性,并且屬性根據(jù)應(yīng)用的設(shè)置查詢出相應(yīng)的Style加載到控件上。如何實現(xiàn)應(yīng)用主題切換通知頁面重新加載樣式這個關(guān)鍵點,還在思索當(dāng)中,后續(xù)有結(jié)果會再發(fā)表博文。同時希望有好想法的能留個思路。
?
設(shè)想:
<Grid cm:StyleAttach.StyleName="bgGrid" cm:StyleAttach.Theme="{Binding Theme}"> </Grid>通過綁定主題和資源名稱來獲取資源,同時通過Theme附加屬性的修改,保證主題更改時實時更新皮膚。
posted on 2013-12-27 20:56 NET未來之路 閱讀(...) 評論(...) 編輯 收藏轉(zhuǎn)載于:https://www.cnblogs.com/lonelyxmas/p/3494769.html
總結(jié)
以上是生活随笔為你收集整理的Windows Phone 资源管理与换肤思考的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 非常经典的C字符串函数的实现
- 下一篇: Windows下hadoop配置