【问题标题】:Splitting WPF ResourceDictionary拆分 WPF 资源字典
【发布时间】:2011-04-08 13:44:54
【问题描述】:

我有一个 WPF 应用程序,由大约七个用户控件组成,每个控件上都有各种不同的控件(文本框、组合框、单选按钮等)。

在整个应用程序中,我应用了一组来自 CodePlex 上的 WPF 主题的控件样式,但是我注意到自从应用这些样式后,应用程序的速度有点慢。包含我所有样式的 ResourceDictionary 的代码大小接近 300kb。

将样式拆分为多个资源字典并仅合并每个用户控件所需的样式而不是所有控件样式(即使它们没有被使用)是否会有好处。

WPF 如何将样式加载到内存中?何时需要,或者整个 ResourceDictionary 是否在启动时加载到内存中?

【问题讨论】:

    标签: wpf resourcedictionary


    【解决方案1】:

    从 XAML(或 BAML)创建对象时,XamlReader 会反序列化所有 XAML 的内容。它找到的每个 XAML 元素都会创建一个对象的实例 - 因此,UserControl.Resources 元素下的 Style 元素会生成 Style 对象,这些对象会在反序列化对象时添加到用户控件的资源字典中。 (实际上比这要复杂一些,因为 XAML 反序列化的某些部分显然是异步的,但对于本次讨论来说已经足够接近了。)

    了解Resources 不是静态属性很重要。用户控件的每个实例都有自己的资源字典。如果您在用户控件的 XAML 中放置 300 个样式,并创建 100 个用户控件,您将创建 30,000 个Style 对象。无论您是否使用合并字典,这都是正确的。

    如果您的资源字典如您所说的那么大,那么目前最好的做法是将其放入应用程序的Resources 属性中。这样,您只需为每个对象的反序列化付出一次代价。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-01
      • 1970-01-01
      相关资源
      最近更新 更多