资源Assets
许多应用程序需要在其可执行文件中包含位图和资源字典,并从XAML中引用这些资源。
包含资源
可以使用项目文件中的<AvaloniaResource>
项将资源包含在应用程序中。默认情况下,MVVM应用程序模板将Assets
目录中的所有文件都作为<AvaloniaResource>
包含:
您可以通过添加其他<AvaloniaResource>
元素来包含任何想要的文件。
您会注意到我们在这里提到了_资源_,而 MSBuild 项称为 Avalonia 资源。内部将资源存储为.NET资源,但是因为术语“资源”与XAML资源发生冲突,我们将在整个过程中将其称为“资源”。
引用资源
在 XAML 中引用资源时,可以使用相对路径:
或者使用绝对路径:
如果资源位于不同的程序集中,可以使用 avares:
URI 方案引用资源。例如,如果资源位于名为 MyAssembly.dll
的程序集中,可以使用:
对于字体,可以在 "#" 符号后面提供字体名称:
Avalonia 提供了转换器,可以自动将资源 URI 转换为以下任何类型:IImage、IBitmap、WindowIcon 和 FontFamily。
引用清单资源
还可以通过在项目文件中使用 <EmbeddedResource>
MSBuild 项来将资源包含在 .NET 应用程序中,这将导致该文件作为 清单资源 包含在程序集中。
可以使用 resm:
URL 方案引用清单资源:
或者如果资源嵌入在与 XAML 文件不同的程序集中:
资源的名称是由 MSBuild 自动从程序集名称、文件路径和文件名生成的,它们用点号分隔。如果 Avalonia 无法找到清单资源,请使用 Assembly.GetManifestResourceNames
检查资源名称。
注意:从 11.0 开始,Avalonia 不再支持清单 "resm" 资源。请改用 Avalonia 资源 (avares)。
从代码中加载资源
可以使用 IAssetLoader
接口从代码中加载资源:
上面代码中的 uri
变量可以包含任何有效的 URI,包括上述 avares:
和 resm:
。默认情况下,Avalonia 不支持 file://
、http://
或 https://
方案。如果要从磁盘或网络加载文件,可以自己实现这个功能,或者使用社区实现,例如 https://github.com/AvaloniaUtils/AsyncImageLoader.Avalonia。
Last updated