WPF的自定义皮肤引擎

时间:2013-03-04 00:25:24

标签: c# wpf templates themes skin

我想让我的应用程序(C#+ WPF)的用户构建自己的主题和皮肤。 实现这一目标的最佳途径是什么?是否有一些例子或某些我需要寻找的“皮肤引擎”?

来自Web开发我通常使用XAML和图像来构建UI ......但是这样所有来源都将被“硬编码”,嵌入主exe或者某些dll中......

相反,我希望有一些文本文件包含所有参数(如颜色,间距,尺寸,字体大小等...)以及jpg或png格式的文件夹中包含的所有图像。 有可能吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

我不知道WPF的任何预先构建的皮肤引擎,允许用户选择颜色并更新应用程序。但是我在WPF应用程序中对“带有所有参数的文本文件...”使用了类似的方法,并且它运行得相当好。

我们使用了主题颜色/图标/等的XML文件。在运行时加载并用于使用公司定义的颜色更新应用程序资源。图片。根据您的体系结构,您还可以将皮肤/主题存储在数据库中。

为了实现这一点,我们提出了几点建议:

  • 定义可在整个应用程序中使用的标准Colors集(例如LightControlColor,ControlColor,DarkControlColor,LightBackgroundColor,BackgroundColor,Dark ...)。这些是XML文件中定义的颜色,将在外观/主题更改时更新。
  • 定义您将在所有XAML中使用的Brushes标准集。这些画笔将使用Colors,因此ControlBackgroundBrush可以是由SolidColorBrush(来自上方)之一组成的Colors,也可以是LinearGradientBrush由多种颜色组成。
  • 使用DynamicResource无处不在StaticResource,以便在根据XML文件更新Color资源时,所有内容都会更新。
  • 在显示主窗口之前,您需要更新Colors中的Application.Resources,因为在呈现可视元素时会评估DynamicResources。在您加载,解析和合并皮肤时,启动画面是占用用户的好方法。
  • 我们没有太多的图片,但我相信我们在XML中存储了二进制格式的图像。
  • 我们构建了一个单独的应用程序来创建皮肤/主题。这是独立于主应用程序分发的,严格来说是为了创建&更新皮肤。
相关问题