search
LoginSignup
0

More than 1 year has passed since last update.

posted at

updated at

Xamarin.Forms の local image のファイル名の制限

画像ファイルに適当な名前を付けてハマりました。123.png という名前を付けたのですが...

Local image

Xamarin.Forms で Image クラスの Source プロパティに local image を指定するときには、使えないファイル名があるので注意が必要です。公式ドキュメントの「Images in Xamarin.Forms」によれば、次の通りです。

only lowercase letters, numerals, the underscore, and the period are allowed

小文字、数字、アンダースコア、ピリオド。数字も大丈夫なのでは? Android プロジェクトの Resources/drawable に画像ファイルを置いて試してみましょう。先頭の文字にはもう少し制限があることが分かります。

ファイル名 説明
sample.png 可。
123sample.png 不可。Resource.designer.cs のビルドに失敗します。Resource.designer.cs に 123image という変数が書き出されますが、C# の変数は数字で開始することはできません。
_123sample.png 可。
.sample.png 不可。ビルドは通りますが、画像は表示されません。Resource.designer.cs に書き出されません。
s.ample.png 不可。次のようなビルドエラーとなります。: file name cannot contain '.' other than for specifying the extension.

iOS ではアセットカタログを使うので、何でもいけます。何でも? さすがに / は使えません。しかし、iOS だけで使える名前にしても仕方がないので、上記の制限の範囲で名前を付けることになります。

.png は省略できます (PNG 以外の拡張子は省略できません)。次のどちらの書き方も有効です。

<Image Source="sample.png"/>
<Image Source="sample"/>

アセットカタログの名前に .png を付けるのは変な感じがするから? そのせいでピリオドが使えなくなってる? このあたりの事情は分かりません。

Embedded image

共通プロジェクトの embedded image なら数字で開始することもできます。

ファイル名 説明
'sample.png`
123sample.png
_123sample.png
.sample.png
s.ample.png 不可

embedded image では、画像ファイルのパスの区切りにピリオドを使います。例えば App1\images\sample.png ならば次のように指定します。

Image1.Source = ImageSource.FromResource("App1.images.sample.png");

s.ample.png が不可なのは、s フォルダの下を探しに行ってしまうからでしょう。ちなみに、.sample.png"App1.images..sample.png" という指定で表示できました。

また、local image とは違って、.png は省略できないようです。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
0