Документация по Avalonia UI
< Все темы
Печать

Ресурсы

Многие приложения должны включать ресурсы, такие как растровые изображения и словари ресурсов, в свои исполняемые файлы и ссылаться на эти ресурсы из 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.

Оглавление