😽

AvaloniaUI Assetsへのコードからのアクセス方法

2024/02/23に公開

やりたいこと

Visual Studio 2022 + AvaloniaUI環境でAssetsにいれたファイルにC#のコードからアクセスしたい

使用環境

Windows 11 : Home 22H2 + Visual Studio Community 2022(64bit)
Linuxテスト環境 : 上記Windows上のWSL2 Ubuntsu 22.04.2 LTS
Visual Studio2022, AvaloniaUI 11.0.2

Assetsへのアクセス方法

Abalonia.Platform.AssetLoaderを介してURLに"avares://ApplicationName/Assets/*"を指定して読み込む。
追加したAssetのプロパティでビルドアクションが"AvaloniaResource"になっている必要がある。

image取得

var bitmap = new Bitmap(AssetLoader.Open(new Uri("avares://TestApp/Assets/Image/Test.png")));

下記参考
https://docs.avaloniaui.net/docs/basics/user-interface/assets
Image,Bitmap,WindowIcon,FontFamily
を扱えるとある。

stringの取り出し

stringを取得するmethodはなさそうだったので、
AssetLoaderからのstream経由でstringに変換する

            string str;
            using (var stream = AssetLoader.Open(new Uri("avares://TestApp/Assets/Text/Test.txt")))
            {
                byte[] buffer = new byte[stream.Length];
                stream.Read(buffer, 0, (int)stream.Length);
                var encoding = Encoding.GetEncoding("UTF-8");
                str = encoding.GetString(buffer);
            }

Discussion