36

私のアセンブリには、BuildAction==Resource のイメージが含まれています。この埋め込みリソースから BitmapImage を取得したいと考えています。

次のように、ファイルから BitmapImage をロードできます。

var bitmap = new BitmapImage(new Uri(path));

しかし、埋め込まれたリソース イメージを参照する Uri を作成するにはどうすればよいでしょうか。

「 pack URI」(pack://application:,,,/MyImage.pngまたはなど)を作成しようとするとpack://application:,,,/MyAssembly;component/MyImage.png、例外がスローされます:

System.UriFormatException 「無効な URI: コロン (':') が存在するため、ポートが予期されましたが、ポートを解析できませんでした。」

このブログ投稿の UriFormatException に対する修正を見つけました

ただし、その修正を適用しても、パック URI から BitmapImage を読み込もうとすると例外が発生します。

形式を使用するpack://application:,,,/Image.pngと NullReferenceException が発生し、pack://application:,,,/AssemblyName;component/Image.png形式を使用すると NotSupportedException 「Uri プレフィックスが認識されません」が発生します。


まとめ 私の問題は、WPF コントロール/ウィンドウ/etc がインスタンス化される前にプロセスで「パック URI」を使用しようとしていたため、「パック」URI スキームがまだ登録されていなかったことです (他の WPF に必要な「スタッフ」もパックスキームを手動で登録しても問題は解決しないため、設定しないでください)。解決策は、WPF ユーザーコントロールをインスタンス化してパック URI を使用するまで待つことでした。

4

1 に答える 1

23

この MSDN ページには、WPF のリソース URI (パック URI とも呼ばれます) について知りたいと思われるすべての情報が含まれています。相対 URIをより頻繁に使用することになるので、特に役立つ表 4を参照してください。

リソース (パック) URI の簡単な概要が必要な場合は、このブログ投稿を参照してください。構文が実際に比較的単純であることを示しています。

pack://application:,,,/ResourceFile.xaml

pack://application:,,,/ReferencedAssembly;component/ResourceFile.xaml

ただし、(私の経験では) 解決すべき問題がいくつかあるため、多くの場合、正しいリソース URI を見つけるには少し実験が必要です。

于 2009-05-13T12:47:27.633 に答える