WPF 资源字典如何工作?(我无法加载我的

本文关键字:我的 加载 工作 字典 资源 何工作 WPF | 更新日期: 2023-09-27 18:36:32

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

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

对于一个简单的应用程序,它工作得很好

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

说它找不到包含我的项目使用的资源字典的文件。
它还说它找不到该资源字典使用的程序集之一。

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

但这对我来说没有意义,原因如下:

  1. 资源字典在我的视图中加载如下:

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

    那也没用。 (它仍然说找不到资源文件。

在考虑这个问题时,我决定我对资源词典的工作原理还不够了解。

谁能启发我为什么我的资源词典无法加载。

WPF 资源字典如何工作?(我无法加载我的

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

我在代码项目上找到了这个链接,可能会有所帮助:http://www.codeproject.com/Articles/35346/Using-a-Resource-Dictionary-in-WPF

看起来您正在尝试在运行时加载资源字典。我有一篇文章,我认为可以回答你的问题:

如何在运行时加载 DictionaryStyle.xaml 文件?