C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[3]: WPF UserControl のリソースアクセス


(過去ログ 131 を表示中)

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■77332 / inTopicNo.1)  WPF UserControl のリソースアクセス
  
□投稿者/ 納豆 (4回)-(2015/10/09(Fri) 11:15:49)

分類:[C#] 

こんにちわ。

通常のC# Windowアプリケーションに、WPFで作成したUserControlを貼り付けています。
画像をリソースから取り出して使用したいのですが、ハマりました。

プロジェクトにResources/Images フォルダを作成し、そこに png画像を登録しました。
全ての画像のビルドアクションを Resouceに変更しました。
(objフォルダに AppName.g.Resourcesファイルができました。ダンプで中身も確認)

この後、
var asm = Assembly.GetExecutingAssembly();
var stm = asm.GetManifestResourceStream("AppName.Resources.Images.content.png");

としても、stmには nullが…見つからないという事ですね。

http://www.kanazawa-net.ne.jp/~pmansato/wpf/wpf_resource.htm
このお方のサイトを参考にさせて頂きました。

色々前提が違っているのですが、アクセスできないのは、何が原因なのでしょうか?
以上、宜しくお願い致します。
引用返信 編集キー/
■77333 / inTopicNo.2)  Re[1]: WPF UserControl のリソースアクセス
□投稿者/ Hongliang (352回)-(2015/10/09(Fri) 13:18:38)
あえてマニフェストリソースから直接取得するならこんな感じでしょうか…?

var stream = typeof(hoge).Assembly.GetManifestResourceStream("AppName.g.resources");
BitmapImage image;
using (var reader = new System.Resources.ResourceReader(stream)) {
foreach (DictionaryEntry resource in reader) {
    // ちなみに名前はURLエンコードされるようなのでASCII文字以外を使うときは注意
    if ((string)resource.Key == "Resources/Images/content.png") {
        image = new BitmapImage();
        image.BeginInit();
        image.StreamSource = (Stream)resource.Value);
        image.EndInit();
        break;
    }
}

パッケージURIを使った方が早いかと思います。
BitmapImage image = new BitmapImage(new Uri("pack://application:,,,/Resources/Images/content.png"));
// System.Windows.Applicationにアクセスするタイミングで
// packスキームやapplication証明機関を登録しているので
// Mainメソッドで記述したりはほぼできないですが。

引用返信 編集キー/
■77334 / inTopicNo.3)  Re[2]: WPF UserControl のリソースアクセス
□投稿者/ 納豆 (5回)-(2015/10/09(Fri) 13:37:37)
No77333 (Hongliang さん) に返信

あっさり出ました…。自分の知識不足ですね。しょうもない質問をして申し訳ありません。

恥かきついでに、ご存じでしたらもう一つ教えて頂きたいのですが、
WPF習得にお勧めの書籍などございましたらお願い致します。
主に3Dをしています。

宜しくお願い致します。
解決済み
引用返信 編集キー/
■77335 / inTopicNo.4)  Re[2]: WPF UserControl のリソースアクセス
□投稿者/ Hongliang (353回)-(2015/10/09(Fri) 13:41:16)
あ、Application.GetResourceStreamがありますね。
var info = Application.GetResourceStream(
    new Uri("Resources/Images/content.png", UriKind.RelativeOrAbsolute));
var stream = info.Stream;

引用返信 編集キー/
■77363 / inTopicNo.5)  Re[3]: WPF UserControl のリソースアクセス
□投稿者/ 納豆 (7回)-(2015/10/14(Wed) 18:04:49)
解決済が外れていました。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -