1

アプリケーションのメイン ウィンドウを作成し、そこにさまざまな 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: 無効なポートが指定されました」というメッセージが表示されます。

4

1 に答える 1

1

質問に示されているように、「pack」URI形式を使用して問題を解決しました。ただし、その前に Application クラスを呼び出す必要がありました。これには、'pack' URI スキームを登録するアプリケーションの静的コンストラクターを実行する効果があります。ここで答えを見つけました。私が使用した呼び出しは、次のとおりです。

var app = Application.Current;
于 2013-06-10T15:05:30.327 に答える