QA@IT
«回答へ戻る

回答を投稿

参考にするとすればこのあたりでしょうか。

1番目のリンクのコンテンツファイルの項にこうあります。

コンテンツ ファイルはコンパイルされてアセンブリに組み込まれるのではありませんが、アセンブリのコンパイル時に、各コンテンツ ファイルとの関連付けを確立するメタデータが使用されます。

アセンブリには組み込まれませんが、メタデータによってファイルと関連付けされます。

pack://application/// でエラーとなるのはそのメタデータが無いためです。
単に置いただけのファイルから取得した場合は
pack://siteoforigin:/// を使用してください

なので、コードを以下の様にすればビルドアクション「なし」でも動作するようになります。

<UserControl.Resources>
    <BitmapImage x:Key="image" UriSource="pack://siteoforigin:,,,/Resources/image.png" />
</UserControl.Resources>

※ 上記はimage.pngのビルドアクション「コンテンツ」でも動作しますが、実行アセンブリのパスを起点としているだけなのでビルドアクションは関係ありません。

参考にするとすればこのあたりでしょうか。

* WPF アプリケーションのリソース ファイル、コンテンツ ファイル、およびデータ ファイル
https://msdn.microsoft.com/ja-jp/library/aa970494(v=vs.110).aspx

* WPF におけるパッケージの URI
https://msdn.microsoft.com/ja-jp/library/aa970069(v=vs.110).aspx


1番目のリンクのコンテンツファイルの項にこうあります。

> コンテンツ ファイルはコンパイルされてアセンブリに組み込まれるのではありませんが、アセンブリのコンパイル時に、各コンテンツ ファイルとの関連付けを確立するメタデータが使用されます。

アセンブリには組み込まれませんが、メタデータによってファイルと関連付けされます。

`pack://application///` でエラーとなるのはそのメタデータが無いためです。
単に置いただけのファイルから取得した場合は
`pack://siteoforigin:///` を使用してください

なので、コードを以下の様にすればビルドアクション「なし」でも動作するようになります。

```xml
<UserControl.Resources>
    <BitmapImage x:Key="image" UriSource="pack://siteoforigin:,,,/Resources/image.png" />
</UserControl.Resources>
```

※ 上記は`image.png`のビルドアクション「コンテンツ」でも動作しますが、実行アセンブリのパスを起点としているだけなのでビルドアクションは関係ありません。