c# - 按名称访问 ResourceDictionary

标签 c# .net wpf vb.net resourcedictionary

假设我的 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 中

最佳答案

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

让你的词典成为一种资源:

enter image description here

加载你的字典,保留对它的引用,然后用它做任何你必须做的事情。

// 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/

相关文章:

c# - 如何在 Visual Studio Web 2010 Express 中将 XNA 内容管道添加到 Silverlight 5?

c# - 如何与框架page.xaml通信

c# - 数据网格:用户无法编辑或选择行

c# - 如何为具有集合的模型创建 View 模型

c# - 为什么我的 C# 程序在从 Windows 7 命令行运行时经常暂停?

c# - 使用 DataTable 的行属性创建 DataView

c# - TcpListener:监听每一个地址,包括GPRS IP地址

wpf - 发生拖动操作时,如何在 XAML 中激活 WPF 触发器?

.net - WPF MVVM设置控制焦点

c# - 接口(interface)是否属于它们自己的文件