如何在应用程序中组织资源字典文件(样式、画刷等)?

11

在应用程序中组织资源文件的最佳方式是什么?目前在我的应用程序中,我的资源添加在 ResourceLib 项目中,该项目具有以下结构:

Color [文件夹]

  • ColorTheme1.xaml
  • ColorTheme2.xaml
  • ColorTheme2.xaml . . .

StyleResource[文件夹]

  • Button.xaml
  • ToggleButton.xaml
  • TextBox.xaml
  • ListBox.xaml
  • Treeview.xaml . . . .

HeaderStyle [文件夹]

  • HeaderStyle1.xaml
  • HeaderStyle2.xaml . . . 等等

这个列表会随着时间的推移而不断增加。

在 App.xaml 中,我引用了这个库并合并这些字典文件进行一次性初始化。使用 DynamicResource 来支持主题功能。

如果继续使用这种结构,是否会有任何性能影响?如果将所有这些xaml文件放入一个资源名称(Style.xaml)中,是否有任何优势或性能影响?

一个包含 5000 行的 Style.xaml 与将其拆分为 10 个不同的 xaml 文件有何性能影响?

最后,哪种方法是最好或被接受的方法?


1
一致性和组织可能会胜过任何微不足道的性能影响。你的情况可能有所不同。 - Wonko the Sane
2个回答

30

2
@JeffMcLean -- 我经常使用这个链接--非常感谢你提供它。不过,你介意分享一下如何从样式资源字典(即在同一项目内的命名样式资源字典中)中引用你的刷子资源吗?已经非常感谢你了。 - Rachael
3
你好,我注意到你在单独的资源文件中存储画笔。假设有一支画笔在所有其他资源(如命名、默认和自定义控件等)中都被使用。这意味着我们需要将画笔合并到至少使用一个画笔的每个其他资源字典中。是否明智地将200支画笔加载到只需要几支画笔的资源字典中? - Goran
我刚刚搜索了我的一个相当大的项目,其中有超过200种样式 - 那么现在我会有200个只包含一种样式的资源字典,这是正确的吗? - Michael Bellamy
首先,感谢Jeff提供的“组织”链接。- 这篇博客文章没有回答的问题是:如何在其他子项目中包含样式?我将我的解决方案组织成一个主项目(其中app.xaml引用了主题),一个主题项目(其中包括所有样式资源)和每个“实体”一个单独的项目,例如客户,订单等。我该如何在子项目中包含样式资源?当然,我在项目中有对程序集的引用,但是我是否必须在每个用户控件中重复引用样式资源字典? - okieh

2
我不确定在所有内容都堆积在一个大字典对象中时是否会获得任何性能提升。即使有任何收益,也不要使用它。拥有不同的xaml所带来的可维护性很难权衡。
话虽如此,“DynamicResource”是一个性能消耗大的操作,您可能需要在可能的地方“Freeze”画笔和图像。添加:xmlns:PresentationOptions="http://schemas.microsoft.com/winfx/2006/xaml/presentation/options"
<SolidColorBrush x:Key="HeaderBrush" Color="Black" PresentationOptions:Freeze="True"/>

有没有任何资源或提示,可以知道何时冻结是好的/可以的,何时可能不是? - Sean Hanley
除非是动态资源,否则我通常会冻结所有的画笔和图像。 - anivas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接