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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Silverlight 下换肤的实现

發布時間:2023/12/31 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Silverlight 下换肤的实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Silverlight 目前控件要改變外觀一般都通過 Style="{StaticResource SomeStyle}" 來指定,而不能統一設置一個默認的 Style. 為了重用,一般把 Style 都放到 App.xaml 的 Resources 字典中去。而 Style 的定義往往非常冗長,這樣 App.xaml 就會變得非常臃腫,修改維護都很麻煩。并且,還不能支持多個控件批量切換 Style 的,總之弊端非常多。

幸好 Nikhil Kothari 想了個辦法解決了這個問題。在使用方式上,借鑒了 asp.net 的 Theme 機制。只要在 Silverlight 程序的根目錄下定義一個 Themes 目錄,并按要求往其中放入相關的皮膚文件即可。這里建議的方式是每一個控件一個單獨的 xaml, 其中放了一個 UserControl. 之所以用 UserControl 的目的是為了能用 Expression Blend 進行可視化設計,非常直觀。

主要實現思想:

1. 繼承了一個自定義的 App 子類. 使用者需要將現有的 App.xaml 改成使用該類才行。
(同時這個 App 類還實現了根據 initParameters 在 xaml 中動態指定加載的 UserControl 和 Theme 的功能)
?? 其中設置一個 ThemeName 屬性來定義 Theme 名稱。

2. 在 App 啟動時,根據這個屬性名動態去加載相關 xaml 的 xml 文件,并解析之。這些皮膚的 xaml 文件在 VS 里是要把 Build Action 設置成 Content 的。這樣可以生成到 xap 包里去,以便于加載。

3. 在讀取多個 xaml 文件并解析的過程中對同樣的 Style 根據優先級做了相應的覆蓋合并。最終形成一個總的 xaml 文件內容。

4. 用 XamlReader 的 Load 方法加載最終的文檔。將其中的資源都抽取出來,并塞到 App.Resources 字典里去。

5. 然后正常的控件視覺樹開始創建。其中的視覺元素指定了 StaticResource 樣式,這時它就能從 App 的資源字典里獲取到皮膚樣式。


注意:這里自始至終沒有動態對控件指定 Style 的機制。因為 Silverlight 目前不支持。
這個解決方案的主要思想就是在視覺樹加載之前,動態的修改了 App 中的資源,后續的樣式應用機制仍然是 framework 默認的。

該方案的代碼地址由 Nikhil Kothari 提供如下:[下載]

原文地址:http://www.nikhilk.net/Silverlight-Themes.aspx

總結

以上是生活随笔為你收集整理的Silverlight 下换肤的实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。