【问题标题】:Managing WPF Resources (brushes etc.)管理 WPF 资源(画笔等)
【发布时间】:2011-12-05 04:03:17
【问题描述】:

通常,我将我认为的基本资源(例如品牌颜色/画笔、字体和大小)放在“distrib”程序集中。

Distrib 程序集|ies 设计用于提供给第 3 方开发商店,因此他们可以访问我们的合同、界面和品牌风格。

然后构建更复杂的资源并在使用它们的位置“更近”地声明。

我遇到了一个自然地、错误地、随意地增长的应用程序。奇怪的是,这些模块使用来自主应用程序可执行项目的资源,即使这些模块没有引用该应用程序。

我假设因为它们将所有资源“导入”到 App.xaml 中,所以它们可用于伪运行时设计器上下文。

我的问题是

如果这就是 MS 设计的工作方式,我是否一直在像管理类型系统一样管理资源做错了?

谢谢

卢克

** 更新 **

因此,有人向我指出,由于严重的性能问题,组织良好的资源不是 WPF 的方式(就像我在我工作的一个大型 SL4 应用程序中发现的那样,但假设它是一个 SL东西)。

假设以这种高度组织化的方式管理资源仍然可以通过一两个技巧来完成,并且模块化系统通常需要合并字典,我开始研究使用 Christian Moser 的 SharedResourceDictionary 解决方案,但我在设计时遇到了问题仅限时间:

System.IO.Packaging.PackUriHelper

The URI prefix is not recognized.
   at System.Net.WebRequest.Create(Uri requestUri, Boolean useUriBase)
   at System.Net.WebRequest.Create(Uri requestUri)
   at MS.Internal.WpfWebRequestHelper.CreateRequest(Uri uri)
   at System.Windows.ResourceDictionary.set_Source(Uri value)
   at CompanyName.Presentation.SharedResourceDictionary.set_Source(Uri value)

看起来它不理解包 Uris,这很奇怪,因为 SharedResourceDictionary 只是调用了 ResourceDictionary 中的原始 MS 实现,并且静态注册包 URI 方案也无济于事!咕噜。

所以我需要破解,第二个选择是将所有内容粉碎到 App.xaml 中并避免合并字典。

这意味着更少的控件/视图,并在我的可分发库中设置设计时字典,我猜这可以完成他们无法访问的 app.xaml 的工作。

我认为这是有道理的。

有趣吗?告诉微软

可能适用于 Silverlight,但我希望 WPF 人员可能会倾听,或者至少它可能会修复一个平台——我在 UserVoice 网站上添加了一个“想法”,您可以投票支持。

http://dotnet.uservoice.com/forums/4325-silverlight-feature-suggestions/suggestions/2307678-fix-the-mergeddictionary-perf-problem

【问题讨论】:

  • 关于这个我可以给你两个问题,我在这里问的部分答案。 Thisthis.
  • 天哪。我从事的最后一个项目,我们干净整洁,然后变得越来越慢,直到我们将它们全部放入 app.xaml 中!那是 SL4,所以我认为 WPF 会很好。哎呀,史酷布。
  • 我对 Silverlight 不是很熟悉,但我想 WPF 和 Silverlight 在这方面并没有什么不同。很遗憾,我同意,但我们设法解决了这个问题。我唯一的愿望是,这会得到更好的记录。限制是可以接受的,只要清楚地传达。
  • 我完全同意你的最后一句话。
  • 在将我的资源组织成各种字典后,我的启动性能也出现了严重问题。现在我使用 app.xaml 来合并我的各种资源字典。如果我要从情感上判断性能(糟糕!),我会说感觉资源字典中的交叉引用越多,它就会越慢。

标签: wpf user-controls


【解决方案1】:

是的,App.xaml 的事情似乎有点像它“应该”工作的方式,尽管显然您已经找到了其他可能的方式。虽然性能问题很烦人,而 App.xaml 方式也很烦人,因为它们在设计时无法解决(至少,它们不适合我们,如果它们适合您,我想知道为什么)。

但是,将它们放入 App.xaml 是我发现的唯一一种接近“官方”声明的技术。

【讨论】:

  • 我使用 DesignTimeResources.xaml 来合并所有资源 dics。这可能会帮助你。否则,我不知道他们如何或为什么工作!以我的经验,它似乎总是有点失败,也许有时依赖库没有构建 - 我认为整个应用程序需要干净且可构建,否则各种地狱爆发。
  • 有时我只是觉得设计师试图让我的生活变得困难。我已经到了手动完成几乎所有 XAML 的地步,至少这样我得到了一个很好的布局,它可以正确调整大小,而不是像设计师默认生成的固定大小的混乱。
  • 是的,我在 Blend 中手动进行布局以及绑定和资源管理。我通常在迷你解决方案中制作东西,然后将其提升到主解决方案/主干。
猜你喜欢
  • 1970-01-01
  • 2022-01-19
  • 1970-01-01
  • 2010-11-29
  • 1970-01-01
  • 2022-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多