【发布时间】:2017-10-18 11:01:13
【问题描述】:
我发现this post 在网络上提高了ResourceDictionaries 的性能,但问题是它已经很老了(2011 年)。我正在考虑实现这样的东西,但我想知道微软是否没有在.NET Framework 的最新版本中修复这个问题。关于这个话题我有几个问题,希望有人能回答一下:
- .NET Framework 4.6.1 是否仍然通过创建多个实例来管理
ResourceDictionaries,每次将它们分配给一个控件时一个实例? - 当我在我的
ResourceDictionary中调用"ButtonStyles"在名为"StylesAssembly"的程序集中有样式"CustomButtonStyle"时,这甚至是一个问题,然后在应用程序的App.xaml中引用它,它有20 个@987654330 @ 和CustomButtonStyle分配给他们? - 我理解正确吗,在上述情况下,
"ButtonStyles"ResourceDictionary的实例将有 20 个?
【问题讨论】:
-
我想这很容易测试,但我很难理解确切的场景。你的意思是另一个带有资源字典的程序集还是什么?
-
@mm8 我已经编辑了第 1 点以便更容易理解,感谢指出我的错误
-
@Sinatr 问题是我不知道如何测试它,因为
ResourceDictionary后面没有代码,所以我不能在那里设置断点。场景是:StyleAssembly是一个ClassLibrary,其中有ResourceDictionary,称为ButtonStyles,其中有CustomButtonStyle。我的应用程序引用StyleAssembly并将其合并到 App.xaml 中,我的 MainWindow 有 20 个Buttons使用样式CustomButtonStyle。它会让我的应用创建 20 个ButtonStyles实例吗? -
我用@mm8方法测试过这种场景,没有问题。仅创建一个实例。发生多次加载的一种明显情况是直接在例如
<ResourceDictionary Source="pack://application:,,,/ClassLibrary;component/ResourceDictionary.xaml" />中写入UserControl.Resources。这确实会为此类用户控件的每个实例创建一个新的资源字典实例。相反,您必须定义一次per application。
标签: c# wpf xaml resourcedictionary