2013-03-04 81 views
1

我想讓我的應用程序(C#+ WPF)的用戶構建自己的主題和皮膚。 實現這一目標的最佳方法是什麼?是否有一些例子,或者我需要尋找某種「皮膚引擎」?WPF的自定義皮膚引擎

從網絡的發展即將我通常使用兩個XAML和圖像打造的UI ...但在這樣所有來源將是「硬編碼」,嵌入主EXE或到一些DLL ...

相反,我想有一些文本文件包含所有參數(如顏色,間距,尺寸,字體大小等)以及以jpg或png格式包含在文件夾中的所有圖像。 這可能嗎?

謝謝!

+0

你用什麼樣的「圖像」來構建用戶界面?在支持矢量圖形的WPF中通常不需要這些。 – 2013-03-04 00:38:14

+0

你在說什麼類型的用戶?您是在談論讓您的用戶從可用選項中選擇顏色/圖像,還是他們的開發人員可以構建自己的XAML資源?隨意查看[這個WPF皮膚庫](https://github.com/brschwalm/Muren),看看它是否有幫助。 – 2013-03-04 04:40:05

+0

是的,我可以使用矢量來設計代碼中的所有內容,以達到更好的效果。但我更喜歡在photoshop中設計所有東西,然後導出界面外觀片,就像我通常爲Web開發所做的那樣。在這個階段,它看起來更容易,更傻瓜,並且它允許用戶更好地理解界面設計,如果他們想要個性化它:小的定製只需要一些jpg替換。 – Catullo 2013-03-04 17:25:28

回答

1

我不知道任何預構建的WPF皮膚引擎,允許用戶選擇顏色和更新應用程序。不過,我在WPF應用程序中使用了類似的方法來處理「包含所有參數的文本文件...」,並且它運行得相當好。

我們使用了一個帶有主題顏色/圖標/等的XML文件。它在運行時加載並用於使用公司定義的顏色&圖像更新應用程序資源。根據您的體系結構,您還可以將皮膚/主題存儲在數據庫中。

爲了這個工作,一對夫婦建議:

  • 定義了一組標準的Colors可使用整個應用程序(如LightControlColor,ControlColor,DarkControlColor,LightBackgroundColor,BACKGROUNDCOLOR,黑暗...) 。這些是在XML文件中定義的顏色,並且將在外觀/主題更改時更新。
  • 定義您將在所有XAML中使用的標準集Brushes。這些畫筆將使用Colors,因此ControlBackgroundBrush可能是SolidColorBrush(由上面的Colors之一組成),或者它可能是由多種顏色組成的LinearGradientBrush
  • 使用DynamicResource隨處可得,而不是StaticResource,這樣當您根據XML文件更新Color資源時,所有內容都會更新。
  • 在顯示主窗口之前,您需要更新,Application.Resources,因爲DynamicResources是在渲染可視元素時評估的。啓動屏幕是在加載,解析和合並皮膚時佔用用戶的好方法。
  • 我們沒有太多圖片,但我相信我們在XML中存儲了我們以二進制格式存儲的圖片。
  • 我們爲創建皮膚/主題構建了一個單獨的應用程序。這是獨立於主應用程序分發的,嚴格用於創建&更新皮膚。
+0

感謝您的建議布賴恩。 我希望這會更容易達到... – Catullo 2013-03-04 17:31:17

+0

你介意分享一些代碼嗎?你如何在XAML中引用這些DynamicResources?我只是一個初學者,所以每一個簡單的任務就像爬山一樣:)我也讀了一些關於XAMLReader和在網絡上使用外部未編譯的xaml:有沒有人有過這種技術的經驗? – Catullo 2013-03-04 17:42:48