假设我的 Application.xaml 中有一些 ResourceDictionary 定义如下:
<Application>
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary x:Name="brushResources"/>
<ResourceDictionary x:Name="graphicsResources"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
</Application>
我本以为我可以像这样在后面的代码中简单地访问字典:
brushResources.MergedDictionaries.Add(someNewBrushes)
graphicsResources.MergedDictionaries.Add(someNewGraphics)
但是好像不是这样,这是不是处理ResourceDictionary的错误做法?我真的很喜欢使用 MEF 动态加载资源的能力,这对我来说似乎是一个绊脚石。
编辑
固定示例代码以显示字典实际上在 MergedDictionaries 中
最佳答案
由于您无法为此类资源定义键或名称,因此您需要执行以下操作:
让你的词典成为一种资源:
加载你的字典,保留对它的引用,然后用它做任何你必须做的事情。
// Load the dictionary
ResourceDictionary resourceDictionary = null;
var resourceStream = Application.GetResourceStream(new Uri("ResourceDictionary1.xaml", UriKind.Relative));
if (resourceStream != null && resourceStream.Stream != null)
{
using (XmlReader xmlReader = XmlReader.Create(resourceStream.Stream))
{
resourceDictionary = XamlReader.Load(xmlReader) as ResourceDictionary;
}
}
然后将其添加到您的应用程序中:
// Merge it with the app dictionnaries
App.Current.Resources.MergedDictionaries.Add(resourceDictionary);
(来自文档 Merged Resource Dictionaries)
这完全复制了原始行为,但现在您可以访问字典。
对于设计时,您肯定希望在 XAML 中声明字典的默认行为,然后您可以在运行时做的是删除所有字典并使用上述方法重新加载它们。
关于c# - 按名称访问 ResourceDictionary,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23102504/