アプリケーションのメイン ウィンドウを作成し、そこにさまざまな WPF ページを表示する DLL の形式で IOC フレームワークを開発しています。Build Action が Resource に設定された PNG 画像のフォルダーがあります。このようなコードを使用して、WPF Image 要素のソースを設定します...
MyImage.Source = new BitmapImage(new Uri("/MyAssembly;component/Images/MyImage.png", UriKind.Relative));
これはうまくいきます。ただし、ユーザーがこれらの WPF ページの 1 つを別のウィンドウに表示することを選択できる機能もあります。ここに謎があります。ユーザーが別のウィンドウでページを表示する前に、メイン ウィンドウでページに移動した場合は、すべて問題ありません。ただし、ユーザーがメイン ウィンドウに表示される前に別のウィンドウでページを表示するDirectoryNotFoundException
と、「パス 'C:\MyAssembly;component\Images\MyImage.png' の一部が見つかりませんでした」というメッセージが表示されます。
OnLoad キャッシュ オプションを発見し、次のコードを試しました...
var image = new BitmapImage();
image.BeginInit();
image.CacheOption = BitmapCacheOption.OnLoad;
image.UriSource = new Uri("/MyAssembly;component/Images/MyImage.png", UriKind.Relative);
image.EndInit();
MyImage.Source = image;
ただし、DirectoryNotFoundException
作成しようとした最初のイメージを取得します。
絶対URIも試しました...
MyImage.Source = new BitmapImage(new Uri("pack://application:,,,/MyAssembly;component/Images/MyImage.png", UriKind.Absolute));
すると、UriFormatException
「無効な URI: 無効なポートが指定されました」というメッセージが表示されます。