Ресурсы
Многие приложения должны включать ресурсы, такие как растровые изображения и словари ресурсов, в свои исполняемые файлы и ссылаться на эти ресурсы из XAML.
Включение активов
Ресурсы можно включить в приложение с помощью элемента <AvaloniaResource>
в файле вашего проекта. Шаблон приложения MVVM по умолчанию включает все файлы в каталоге Assets как <AvaloniaResource>
:
<ItemGroup> <AvaloniaResource Include="Assets\**"/> </ItemGroup>
Вы можете включать любые файлы, которые хотите, добавляя дополнительные элементы <AvaloniaResource>
.
Вы заметите, что здесь мы имеем в виду активы, тогда как элемент MSBuild называется ресурсом Avalonia. Активы хранятся внутри как ресурсы .NET, но поскольку термин «ресурс» конфликтует с ресурсами XAML, мы будем называть их «активами».
Ссылки на активы
На активы можно ссылаться в XAML, указав их относительный путь:
<Image Source="icon.png"/> <Image Source="images/icon.png"/> <Image Source="../icon.png"/>
Или их корневой путь:
<Image Source="/Assets/icon.png"/>
Если актив находится в сборке, отличной от XAML-файла, используйте схему avares:
URI. Например, если актив содержится в сборке с именем MyAssembly.dll
, вы должны использовать:
<Image Source="avares://MyAssembly/Assets/icon.png"/>
Avalonia предоставляет конвертеры, которые могут загружать ресурсы для растровых изображений, значков и шрифтов из коробки. Таким образом, ресурс Uri может быть автоматически преобразован в любой из следующих типов: IImage, IBitmap, WindowIcon и FontFamily.
Ссылки на ресурсы манифеста
Активы также можно включать в приложения .NET с помощью элемента MSBuild <EmbeddedResource>
, который приводит к включению файла в сборку в качестве ресурса манифеста.
Вы можете ссылаться на ресурсы манифеста, используя схему resm:
URL:
<Image Source="resm:MyApp.Assets.icon.png"/>
Или, если ресурс встроен в сборку, отличную от файла XAML:
<Image Source="resm:MyApp.Assets.icon.png?assembly=MyAssembly"/>
Имя актива автоматически создается MSBuild из имени сборки, пути к файлу и имени файла, разделенных точками. Если Avalonia не удается найти ресурс манифеста, проверьте имя ресурса с помощью Assembly.GetManifestResourceNames
.
Загрузка ресурсов из кода
Ассеты можно загружать из кода с помощью интерфейса IAssetLoader
:
var assets = AvaloniaLocator.Current.GetService<IAssetLoader>(); var bitmap = new Bitmap(assets.Open(new Uri(uri)));
Переменная uri
во фрагменте может содержать любой допустимый URI, включая avares:
и resm:
, как описано выше. По умолчанию Avalonia не поддерживает схемы file://
, http://
или https://
. Если вы хотите загружать файлы с диска или из Интернета, вы можете реализовать эту функцию самостоятельно или использовать реализации сообщества, такие как https://github.com/AvaloniaUtils/AsyncImageLoader.Avalonia.