我的问题是,我试图用不同的颜色从WPF的DrawingImage中加载几个ResourceDirectory。用StaticResource和DynamicResource都不能分辨出这些颜色。
所讨论的ResourceDirectory从来都不是WPF环境的一部分(对于任何窗口或应用程序都是如此),因为在我的情况下,这是行不通的。相反,字典是加载在代码中,在那里管理任何查询。
现在的问题是我基本上有三本字典。两个用于颜色(两个不同的调色板)和一个包含DrawingImage定义。两个颜色字典都包含有相同名称的资源。
因此,我的计划是加载DrawingImage字典,一旦完成,就将所需的颜色字典作为合并字典应用。失败了。我还尝试将这两本字典作为合并字典添加到父词典中。那也失败了。
我试着用两种方式加载字典:
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的查找吗?或者还有其他方法来存档我需要的东西?
有一点:由于我开发了一个运行在更大的第三方应用程序中的库,所以我不能使用全局应用程序资源字典。
发布于 2016-02-15 09:24:03
因此,这个问题是有解决办法的。如果应用了搜索上下文,则可以使用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的资源,获取资源就会像预期的那样工作。
https://stackoverflow.com/questions/35369308
复制相似问题