日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > windows >内容正文

windows

Windows Phone 资源管理与换肤思考

發(fā)布時間:2023/12/20 windows 52 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Windows Phone 资源管理与换肤思考 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
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)換膚

if (Application.Current.Resources.MergedDictionaries[1].Source.OriginalString.Equals("/Common/BlackStyle.xaml")){Application.Current.Resources.MergedDictionaries[1].Clear();Application.Current.Resources.MergedDictionaries[1].Source = new Uri("/Common/WhiteStyle.xaml", UriKind.Relative);}else{Application.Current.Resources.MergedDictionaries[1].Clear();Application.Current.Resources.MergedDictionaries[1].Source = new Uri("/Common/BlackStyle.xaml", UriKind.Relative);}

如此,確實能實時更換皮膚。然而當(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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。