2013-03-04 82 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