You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在WPF与.NET 4.5环境下从其他项目加载ResourceDictionary?

解决WPF跨项目引用资源字典崩溃的问题

我之前也踩过跨项目共享WPF资源字典的坑,结合你给出的代码和场景,大概率是这几个常见问题导致的崩溃,咱们一步步来解决:

1. 修正Pack URI的格式错误

你当前写的URI漏掉了关键的component/部分,这是WPF标识程序集内资源的必填路径段。正确的URI应该是:

<Window.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="pack://application:,,,/CommonComponents;component/Resources/Theme.xaml" />
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Window.Resources>

或者更简洁的等效写法:

<ResourceDictionary Source="/CommonComponents;component/Resources/Theme.xaml" />

2. 检查资源文件的生成操作

确保CommonComponents项目里的Theme.xaml文件的生成操作设置为Resource:

  • 右键Theme.xaml → 选择「属性」
  • 在「生成操作」下拉框里选择「Resource」,然后保存设置

如果这里设置成了Content或者None,WPF在运行时根本找不到这个资源文件,必然会崩溃。

3. 确认项目引用是否正确

检查Project1是否已经正确引用了CommonComponents项目:

  • 右键Project1 → 选择「添加」→「项目引用」
  • 在弹出的窗口里勾选CommonComponents,确保引用的是对应配置(Debug/Release)下的项目

额外验证:全局资源加载

如果窗口级别加载还是有问题,可以尝试在App.xaml里合并资源字典,这样资源会在应用启动时就加载,避免窗口初始化时的资源加载顺序问题:

<Application.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="/CommonComponents;component/Resources/Theme.xaml" />
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Application.Resources>

修改完成后,重新生成整个解决方案再运行,应该就能看到Button变成红色的效果了。

内容的提问来源于stack exchange,提问作者Yanick Rochon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 21:03:10