WPF ResourceDictionary如何工作? (我不能让我加载。)

时间:2012-06-08 17:21:59

标签: c# .net wpf resourcedictionary

我编写了一个自定义程序集,可让我在设计时查看我的棱镜区域。

我的程序集所做的一件事是它将从启动项目加载程序集。 (使用Prism的模块目录。)

对于一个简单的应用程序,它可以很棒

但是当我试图将它放入我的真实应用程序时,它会破坏设计时间视图(运行时工作正常)。

它说无法找到包含我的项目使用的ResourceDictionary的文件 它还说它无法找到该ResourceDictionary使用的程序集之一。

我的猜测是从启动位置拉出程序集导致此问题。

但由于以下原因,这对我没有意义:

  1. ResourceDictionary在我的视图中加载如下:

    <UserControl.Resources>
      <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="/DataProviders.xaml"/>
        </ResourceDictionary.MergedDictionaries>
      ...
    

    但加载它的文件不包含在输出中。所以它必须编译成dll。
    这让我觉得这应该有用:

    <ResourceDictionary Source="/MyProj;component/DataProviders.xaml" />
    

    但这也不起作用。 (我在没有斜线的情况下尝试过它。)

  2. 如果是位置问题(因为我从开始项目而不是输出位置(bin \ debug)加载),那么为什么它找不到它认为缺少的其他程序集?登记/> 。
    该程序集位于两个项目的输出文件夹中(启动和相关项目)。

  3. 确定它是位置,我尝试了源中的绝对路径。像这样:

    <ResourceDictionary Source="C:/src/solution/Regns/MyProj/DataProviders.xaml"/>
    

    这也不起作用。 (它仍然说它找不到资源文件。)

  4. 在考虑这个问题时,我认为我对ResourceDictionarys的工作原理不够了解。

    任何人都可以告诉我为什么我的ResourceDictionary不会加载。

2 个答案:

答案 0 :(得分:2)

该应用程序有一个“中央”ResourceDictionary,您可以通过Application.Current.Resources访问该应用。如果您有其他资源要从其他程序集中加载,那么在应用程序启动时,您需要将外部程序集中的所有字典与应用程序中的主资源字典合并,并将Application.Current.Resources属性设置为一组合并的词典。

我在代码项目中发现了这个可能有用的链接:http://www.codeproject.com/Articles/35346/Using-a-Resource-Dictionary-in-WPF

答案 1 :(得分:0)

看起来您正在尝试在运行时加载资源字典。我有一个帖子,我想回答你的问题:

How to load a DictionaryStyle.xaml file at run time?