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

如何通过代码向Avalonia UI的MergedDictionaries添加资源?

Avalonia代码动态加载资源字典的正确方法

你之前的代码没生效,主要是两个原因:一是没有显式触发资源加载,二是Uri格式不符合Avalonia的资源寻址规则。以下是两种可行的实现方式:

方法一:使用ResourceInclude并显式加载

// 清空现有合并资源字典
Application.Current?.Resources.MergedDictionaries.Clear();

// 构建资源Uri,替换YourAssemblyName为你的项目程序集名称
var resourceUri = new Uri("/YourAssemblyName;component/Assets/icons/LightIcons.axaml", UriKind.RelativeOrAbsolute);
var resourceInclude = new ResourceInclude(resourceUri);

// 显式加载资源(同步用Load(),异步用LoadAsync())
await resourceInclude.LoadAsync();

// 将加载后的资源添加到合并字典
Application.Current?.Resources.MergedDictionaries.Add(resourceInclude);

方法二:用AssetLoader直接加载ResourceDictionary

这是Avalonia推荐的资源加载方式,更简洁直接:

Application.Current?.Resources.MergedDictionaries.Clear();

// 使用avares协议指定资源路径,替换YourAssemblyName为你的项目程序集名称
var resourceDict = await AssetLoader.LoadAsync<ResourceDictionary>(new Uri("avares://YourAssemblyName/Assets/icons/LightIcons.axaml"));
Application.Current?.Resources.MergedDictionaries.Add(resourceDict);

关键注意事项

  • 确保目标.axaml资源文件的生成操作设置为AvaloniaResource(右键文件→属性→生成操作),否则资源无法被程序识别加载。
  • 替换代码中的YourAssemblyName为你实际的项目程序集名称,可在项目属性的“应用”选项卡中查看。

内容的提问来源于stack exchange,提问作者RinF-UwU

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 20:42:21