5
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Last updated at Posted at 2020-12-22

画像ファイルに適当な名前を付けてハマりました。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 は省略できないようです。

5
0
0

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
  3. You can use dark theme
What you can do with signing up
5
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?