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