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

加载指定文件夹ResourceDictionary报错:URI资源不可用的原因求助

为什么加载WPF语言ResourceDictionary时出现"资源不可用"错误?

你遇到的这个错误:

System.Exception: 'A resource identified by the URI' ..\Resources\Languages\it.xaml 'is not available for the' System.Windows.ResourceDictionary 'component.'

通常由以下几个常见原因导致,我来逐个分析并给出解决办法:

1. URI路径格式或上下文错误

你当前使用的是文件系统风格的相对路径"..\\Resources\\Languages\\it.xaml",但WPF应用运行时,资源文件是嵌入到程序集(Assembly)中的,而非以独立文件形式存在,这种路径写法会导致WPF无法正确定位资源。

解决办法:改用WPF标准的Pack URI或者基于程序集根目录的相对URI:

  • 简化相对URI(适用于当前程序集内的资源):"/Resources/Languages/it.xaml"(注意开头的斜杠,表示从程序集根目录开始)
  • 完整Pack URI写法:"pack://application:,,,/Resources/Languages/it.xaml",这种写法更明确,适合跨程序集场景

2. 资源文件的生成操作设置错误

如果你的.xaml资源文件没有被正确标记为嵌入资源,编译后不会被包含到程序集里,自然无法被加载。

检查步骤:

  • 在Visual Studio中右键点击it.xaml或en.xaml文件,选择属性
  • 确认生成操作(Build Action)设置为Resource,而不是Content、None或其他选项
  • 保存设置后重新编译项目

3. 相对路径的基准上下文不符合预期

你代码中的..\\表示当前目录的上一级,如果这段代码是在App.xaml.cs或项目根目录下的代码文件中执行,..\\会指向项目目录的上级,而你的资源文件实际位于项目根目录下的Resources/Languages文件夹,所以这个路径本身就是错误的,应该去掉..\\部分。


修正后的示例代码

var dict = new ResourceDictionary();
string currentLang = "it-IT";
CultureInfo targetCulture;
Uri resourceUri;

if (currentLang == "it-IT")
{
    targetCulture = CultureInfo.CreateSpecificCulture("it");
    // 使用基于程序集根目录的相对URI
    resourceUri = new Uri("/Resources/Languages/it.xaml", UriKind.Relative);
}
else
{
    targetCulture = CultureInfo.CreateSpecificCulture("en");
    resourceUri = new Uri("/Resources/Languages/en.xaml", UriKind.Relative);
}

// 注意:同时设置CurrentUICulture,WPF的资源绑定会优先使用这个属性
CultureInfo.CurrentCulture = targetCulture;
CultureInfo.CurrentUICulture = targetCulture;

try
{
    Application.LoadComponent(dict, resourceUri);
    // 将加载的字典合并到应用全局资源中
    Application.Current.Resources.MergedDictionaries.Add(dict);
}
catch (Exception ex)
{
    // 可添加日志记录便于排查
    Console.WriteLine($"加载语言资源失败:{ex.Message}");
}

额外检查点

  • 确认资源文件的路径拼写完全正确(包括文件夹名称、文件名的大小写,虽然Windows平台不区分,但跨平台场景需要注意)
  • 如果你的资源文件位于另一个类库程序集中,需要在Pack URI中指定程序集名称,例如:"pack://application:,,,/YourClassLibraryName;component/Resources/Languages/it.xaml"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:15:33