首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按名称访问ResourceDictionary

按名称访问ResourceDictionary
EN

Stack Overflow用户
提问于 2014-04-16 07:15:56
回答 2查看 3.5K关注 0票数 6

假设我的Application.xaml中有一些资源字典,定义如下:

代码语言:javascript
复制
<Application>
    <Application.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary x:Name="brushResources"/>
                <ResourceDictionary x:Name="graphicsResources"/>
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Application.Resources>
</Application>

我本以为我可以简单地访问下面代码中的字典:

代码语言:javascript
复制
brushResources.MergedDictionaries.Add(someNewBrushes)
graphicsResources.MergedDictionaries.Add(someNewGraphics)

但情况似乎并非如此,这是处理ResourceDictionary的错误方法吗?我非常喜欢用MEF动态加载资源的能力,对我来说,这似乎是一个绊脚石。

编辑

修正了显示字典的示例代码实际上在MergedDictionaries中

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-04-16 17:10:14

由于您不能为此类资源定义键或名称,因此需要执行以下操作:

让你的字典成为一个资源:

载入你的字典,保持对它的引用,并做任何你必须做的事情。

代码语言:javascript
复制
// 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;
    }
}

然后将其添加到应用程序中:

代码语言:javascript
复制
// Merge it with the app dictionnaries
App.Current.Resources.MergedDictionaries.Add(resourceDictionary);

(来自docs 合并资源词典)

这完全复制了原始行为,但现在您可以访问字典了。

对于设计时,您肯定希望在XAML中声明字典的默认行为,那么在运行时您可以做的是删除所有字典并使用上面的方法重新加载它们。

票数 2
EN

Stack Overflow用户

发布于 2014-04-16 07:27:43

您可以使用FrameworkElement.TryFindResource。如果您在后面的窗口代码中,请执行以下操作:

代码语言:javascript
复制
var myResource = (ResourceDictionary) this.TryFindResource("someResourceName")

如果找不到资源,则返回null。

http://msdn.microsoft.com/en-us/library/system.windows.frameworkelement.tryfindresource.aspx

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23102504

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档