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

Xamarin.Forms中C#类如何从其他XAML文件获取资源?

问题排查和解决办法

1. 确认Secretskeys.xaml已合并到应用全局资源

你在XAML文件中能正常获取资源,大概率是页面/UserControl的资源字典单独引用了Secretskeys.xaml,但应用级的Application.Current.Resources并未包含它,导致后台代码调用时找不到对应键。

解决步骤:
打开App.xaml,在<Application.Resources>节点中添加资源字典合并配置:

<Application.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <!-- 路径需匹配文件实际位置,若在子目录(如Resources)下则写`Resources/Secretskeys.xaml` -->
            <ResourceDictionary Source="Secretskeys.xaml"/>
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Application.Resources>

2. 避免静态类初始化时机过早

如果DbConnection静态类在Application实例完全初始化前就被调用,Application.Current.Resources还未加载完成,就会触发KeyNotFoundException。

解决办法:
将资源获取改为延迟加载模式,确保在Application初始化完成后再读取资源:

private static string _dbLogin;
public static string DbLogin
{
    get
    {
        if (string.IsNullOrWhiteSpace(_dbLogin))
        {
            _dbLogin = (string)Application.Current.Resources["DbLogin"];
        }
        return _dbLogin;
    }
}

3. 检查资源键名的拼写与大小写

WPF资源键名区分大小写,请仔细核对Secretskeys.xaml中目标资源的键是否为DbLogin,同时注意你代码中写的_DbLogib是否为笔误(多了一个字母i)。

4. 确认资源类型匹配

确保Secretskeys.xaml中DbLogin对应的资源确实是字符串类型,避免因类型不匹配导致的异常(虽当前报错为KeyNotFound,但可作为额外排查点)。

额外安全建议

数据库密码、API密钥这类敏感信息,存储在XAML文件中存在明文泄露风险,建议改用Windows凭据管理器或WPF的SecureString来存储敏感数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 18:32:47