コードでWPFイメージソースを設定する 質問する

コードでWPFイメージソースを設定する 質問する

コードで WPF イメージのソースを設定しようとしています。イメージはプロジェクトにリソースとして埋め込まれています。例を見て、以下のコードを思いつきました。何らかの理由で機能せず、イメージが表示されません。

デバッグすると、ストリームに画像データが含まれていることがわかります。それでは何が問題なのでしょうか?

Assembly asm = Assembly.GetExecutingAssembly();
Stream iconStream = asm.GetManifestResourceStream("SomeImage.png");
PngBitmapDecoder iconDecoder = new PngBitmapDecoder(iconStream, BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.Default);
ImageSource iconSource = iconDecoder.Frames[0];
_icon.Source = iconSource;

アイコンは次のように定義されます:<Image x:Name="_icon" Width="16" Height="16" />

ベストアンサー1

あなたと同じ問題を抱えて、いろいろ調べた結果、解決策を見つけました -パックURI

コードでは次のことを行いました:

Image finalImage = new Image();
finalImage.Width = 80;
...
BitmapImage logo = new BitmapImage();
logo.BeginInit();
logo.UriSource = new Uri("pack://application:,,,/AssemblyName;component/Resources/logo.png");
logo.EndInit();
...
finalImage.Source = logo;

または、別の BitmapImage コンストラクターを使用して、さらに短くします。

finalImage.Source = new BitmapImage(
    new Uri("pack://application:,,,/AssemblyName;component/Resources/logo.png"));

URI はいくつかの部分に分かれています:

  • 権限:application:///
  • パス: 参照アセンブリにコンパイルされるリソース ファイルの名前。パスは次の形式に従う必要があります。AssemblyShortName[;Version][;PublicKey];component/Path

    • AssemblyShortName: 参照されるアセンブリの短い名前。
    • ;バージョン [オプション]: リソース ファイルを含む参照アセンブリのバージョン。これは、同じ短い名前を持つ 2 つ以上の参照アセンブリが読み込まれるときに使用されます。
    • ;PublicKey [オプション]: 参照アセンブリの署名に使用された公開キー。これは、同じ短い名前を持つ 2 つ以上の参照アセンブリが読み込まれるときに使用されます。
    • ;component: 参照されるアセンブリがローカル アセンブリから参照されることを指定します。
    • /Path: 参照アセンブリのプロジェクト フォルダーのルートを基準としたリソース ファイルの名前 (パスを含む)。

後ろの 3 つのスラッシュはapplication:コンマに置き換える必要があります。

注: パック URI の権限コンポーネントは、パッケージを指す埋め込み URI であり、RFC 2396 に準拠している必要があります。また、「/」文字は「,」文字に置き換え、「%」や「?」などの予約文字はエスケープする必要があります。詳細については、OPC を参照してください。

もちろん、イメージのビルドアクションを に設定してくださいResource

おすすめ記事