我的问题是我正在尝试使用不同的颜色集从WPF DrawingImage
加载几个ResourceDirectory
。使用StaticResource
和DynamicResource
解析这些颜色失败。
有问题的ResourceDirectory
永远不会是WPF环境的一部分(因此任何Window或应用程序都是如此),因为这在我的情况下不起作用。而是字典加载代码,管理任何查询。
现在的问题是我基本上有三本词典。两个用于颜色(两个不同的调色板)和一个包含DrawingImage
定义。两个颜色词典都包含具有相同名称的资源。
所以我的计划是加载DrawingImage
字典,一旦完成,就应用我需要的颜色字典作为合并字典。它失败了。我还尝试将两个字典作为合并字典添加到父级dictonary。那也失败了。
我尝试了两种方式加载词典:
Dim palette As New ResourceDictionary()
palette.Source = New Uri("...", UriKind.Relative)
和
Dim location As New Uri("...", UriKind.Relative)
Dim palette = DirectCast(Application.LoadComponent(location), ResourceDictionary)
两者产生相同的结果。如果我使用DynamicResource
并且这些资源都解析为null
,则会加载资源字典。我认为问题是DynamicResource
查找资源的方法。但是我找不到将这些查找更改/重定向到我的资源字典的方法。
有没有办法改变DynamicResource
的查找?或者有其他方式来存档我需要的东西吗?
有一件事:由于我开发了一个在更大的第三方应用程序中运行的库,因此我无法使用全局应用程序资源字典。
答案 0 :(得分:0)
事实证明这个问题有一个解决方案。如果应用了搜索上下文,则使用DynamicResource
有效。有两个类可用作此扩展的搜索上下文。 FrameworkElement
和FrameworkContentElement
。
解决方案是创建其中一个并将所有相关词典应用于这些类。完成此操作后,DynamicResource
已正确解析。
Dim drawings As New ResourceDictionary()
drawings.Source = New Uri("...", UriKind.Relative)
Dim palette As New ResourceDictionary()
palette.Source = New Uri("...", UriKind.Relative)
result.MergedDictionaries.Add(drawings)
result.MergedDictionaries.Add(palette)
Dim fe As New FrameworkElement()
fe.Resources = result
将字典分配给FrameworkElement
的资源后,可以按预期获取资源。