Silverlight 下换肤的实现
生活随笔
收集整理的這篇文章主要介紹了
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
幸好 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 下换肤的实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Win10提示此站点不安全怎么办 Win
- 下一篇: win11 dxgkrnl.sys蓝屏怎