WPF的自定义皮肤引擎

本文关键字:引擎 自定义 WPF | 更新日期: 2023-09-27 18:02:06

我想让我的应用程序(c# + WPF)的用户建立自己的主题和皮肤。实现这一目标的最佳方式是什么?是否有一些例子或可能是某种类型的"皮肤引擎",我需要寻找?

来自web开发,我通常使用XAML和图像来构建UI…但是通过这种方式,所有的源代码都将被"硬编码",嵌入到主exe或一些dll中…

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

谢谢!

WPF的自定义皮肤引擎

我不知道有任何预先构建的WPF皮肤引擎允许用户选择颜色和更新应用程序。然而,我在WPF应用程序中使用了类似的方法来"包含所有参数的文本文件……",并且效果相对较好。

我们使用了一个带有主题颜色/图标等的XML文件。它是在运行时加载的,用于用公司定义的颜色&图像。根据您的体系结构,您还可以将皮肤/主题存储在数据库中。

为了使其工作,有几个建议:

  • 定义一套标准的Colors可用于整个应用程序(例如LightControlColor, ControlColor, DarkControlColor, LightBackgroundColor, BackgroundColor, Dark…)。这些是在XML文件中定义的颜色,当皮肤/主题发生变化时将会更新。
  • 定义将在所有XAML中使用的Brushes标准集。这些笔刷将使用Colors,所以一个ControlBackgroundBrush可能是一个SolidColorBrush组成的Colors(从上面),或者它可能是一个LinearGradientBrush组成的多种颜色。
  • 在任何地方使用DynamicResource而不是StaticResource,这样当你基于XML文件更新Color资源时,一切都会更新。
  • 你需要在显示主窗口之前更新Application.Resources中的Colors,因为DynamicResources是在渲染视觉元素时评估的。当你加载、解析和合并皮肤时,闪屏是一个很好的占用用户的方式。
  • 我们没有太多的图像,但是我相信我们在XML中存储了二进制格式的图像。
  • 我们构建了一个单独的应用程序来创建皮肤/主题。这是独立于主应用程序分发的,并且严格是为了创建&更新皮肤。