【问题标题】:How to organize Resource Dictionary files (Style, Brush) etc in an Application?如何在应用程序中组织资源字典文件(样式、画笔)等?
【发布时间】:2011-06-14 13:06:41
【问题描述】:

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

颜色[文件夹]

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

样式资源[文件夹]

  • 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 文件对性能有何影响?

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

【问题讨论】:

  • 一致性和组织性可能会胜过任何可忽略的性能影响。 YMMV。

标签: wpf styles


【解决方案1】:

我工作的公司做了很多 WPF 和 Silverlight 工作。我开发了一个组织结构,我们现在在所有项目中都使用它。可以在此处找到该结构和文章:

http://projekt202.com/blog/2010/xaml-organization/

【讨论】:

  • @JeffMcLean -- 我一直使用这个链接 -- 非常感谢您提供它。但是,您介意分享您如何在同一个项目中的 Style ResourceDictionaries(即 NamedStyles 资源字典中)引用您的画笔资源吗?一百万谢谢你。
  • 您好,我注意到您将画笔放在单独的资源文件中。假设有一个特定的画笔用于所有其他资源(命名、默认、自定义控件等)。这意味着我们需要将画笔合并到使用至少一个画笔的所有其他资源字典中。将 200 个画笔加载到只需要几个画笔的资源字典中是否明智?
  • 我刚刚搜索了我的相当大的项目,它有 200 多种样式 - 我现在应该有 200 个资源字典,每个字典都有一种样式吗?
  • 首先,感谢 Jeff 提供的“组织”链接。 - 这篇博文没有回答的问题是:如何在其他子项目中包含样式?我将我的解决方案组织成一个主项目(app.xaml 引用主题)、一个主题项目(包括所有样式资源)和每个“实体”一个单独的项目,例如。 G。客户、订单等。如何在子项目中包含样式资源?当然,我在项目中有对程序集的引用,但是我是否必须在每个用户控件中重复对样式资源字典的引用?
【解决方案2】:

我不确定您是否会获得任何性能,因为无论如何都会堆积在一个大字典对象中。即使有任何收获,也不要去追求它。使用不同的 xaml 获得的可维护性很难权衡。

话虽如此DynamicResource 是一项性能要求很高的操作,但您可能不得不在任何可能的地方使用Freeze 画笔和图像。添加: xmlns:PresentationOptions="http://schemas.microsoft.com/winfx/2006/xaml/presentation/options"

<SolidColorBrush x:Key="HeaderBrush" Color="Black" PresentationOptions:Freeze="True"/>

【讨论】:

  • 有什么资源或提示可以知道什么时候可以冻结/可以冻结,什么时候不可以?
  • 除非它的动态资源,否则我通常会冻结我所有的画笔和图像。
猜你喜欢
  • 1970-01-01
  • 2013-03-01
  • 1970-01-01
  • 2017-12-03
  • 2016-10-10
  • 2011-12-05
  • 2013-10-28
  • 1970-01-01
  • 2017-08-24
相关资源
最近更新 更多