WPF的自定义皮肤引擎
问题描述:
我想让我的应用程序(C#+ WPF)的用户构建自己的主题和皮肤。 实现这一目标的最佳方法是什么?是否有一些例子,或者我需要寻找某种“皮肤引擎”?WPF的自定义皮肤引擎
从网络的发展即将我通常使用两个XAML和图像打造的UI ...但在这样所有来源将是“硬编码”,嵌入主EXE或到一些DLL ...
相反,我想有一些文本文件包含所有参数(如颜色,间距,尺寸,字体大小等)以及以jpg或png格式包含在文件夹中的所有图像。 这可能吗?
谢谢!
答
我不知道任何预构建的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中存储了我们以二进制格式存储的图片。
- 我们为创建皮肤/主题构建了一个单独的应用程序。这是独立于主应用程序分发的,严格用于创建&更新皮肤。
你用什么样的“图像”来构建用户界面?在支持矢量图形的WPF中通常不需要这些。 – 2013-03-04 00:38:14
你在说什么类型的用户?您是在谈论让您的用户从可用选项中选择颜色/图像,还是他们的开发人员可以构建自己的XAML资源?随意查看[这个WPF皮肤库](https://github.com/brschwalm/Muren),看看它是否有帮助。 – 2013-03-04 04:40:05
是的,我可以使用矢量来设计代码中的所有内容,以达到更好的效果。但我更喜欢在photoshop中设计所有东西,然后导出界面外观片,就像我通常为Web开发所做的那样。在这个阶段,它看起来更容易,更傻瓜,并且它允许用户更好地理解界面设计,如果他们想要个性化它:小的定制只需要一些jpg替换。 – Catullo 2013-03-04 17:25:28