web-dev-qa-db-ja.com

画像はVisual Studioデザイナーに表示されますが、実行中には表示されません

私は現在、VS Studio 2010、.NET 4.0で働いています。私のシナリオは次のとおりです。

現在、「アイコン」というサブフォルダを含む「画像」というクラスライブラリプロジェクトがあります。現在、私のアイコンはすべてこのプロジェクトに存在し、siteoforiginを介して複数のプロジェクトからアクセスされます。デザイナーではすべてが正常に表示されますが、実行時には画像は表示されません。

私のフォルダ構造は次のとおりです。

  • ルートフォルダ
    • 画像
      • アイコン
    • プロジェクト1
    • プロジェクト2
    • プロジェクト3

すべてのプロジェクトは、Imagesクラスライブラリを参照しています。 proj、および「Images」プロジェクト内の「icons」サブフォルダー内のすべてのアイコンは、「Build Action = Resource」に設定されます。

Xamlは次のようになります(設計時に完全に表示されます)。

     <Button Name="Button1" Click="Button1_Click">
        <Button.Content>
            <Image Source="pack://siteoforigin:,,,/Data.Images;component/Icons/Button1.png" />
        </Button.Content>
    </Button>
28
d.moncada

siteoforiginは、実行可能ディレクトリまたはサブディレクトリにコピーされたファイル用です。リソースについては、私の知る限り、applicationを権限として使用する必要があります。

SiteOfOrigin:

パス:Originファイルのサイトの名前。実行可能なアセンブリが起動された場所からの相対パスを含みます。

15
H.B.

これは私を夢中にさせました。さまざまな記事に基づいてさまざまなことを試しましたが、何も機能しませんでした。私のxamlウィンドウと画像は、実行可能なアセンブリとは別のDLLにあります。それが私の問題の一部であったかどうかはわかりません。

最終的に私は成功しました:

  1. プロジェクトのイメージプロパティに「ビルドアクション」=「リソース」があり、「埋め込みリソース」が含まれていないことを確認します
  2. 画像タグが選択されたxamlで、プロパティウィンドウを使用して[ソース]ドロップダウンを選択します。これは、画像がドロップダウンリストに表示されるためです。これにより、Visual Studioで文字列をフォーマットできます。

私の画像用にフォーマットされた文字列ビジュアルスタジオは次のとおりです。

<Image Source="/Paperless.Common;component/Resources/Checkbook.png" />

ここで、「Paperless.Common」はアセンブリの名前で、「Checkbook.png」は「Resources」フォルダーにある私の画像でした。

46
Markb

画像のビルドアクションがリソースに設定されていない可能性があります。埋め込みリソースを含むそれ以外の場合、実行時に適切に表示されません。

38
Amine Da.

まあ、私はこの問題に3時間以上の時間を費やしました。あなたの答えは私が問題を部分的に解決するのを助けました、そしてそれは私がこの有用な議論に加えることを私に促したものです。

私は私の問題を次のように解決しました:

  1. ソリューションエクスプローラーリソースのすべての画像を選択します。
  2. 右クリックしてプロパティに移動します。
  3. 「埋め込みリソース」へのアクションを構築する
  4. 「常にコピー」への出力へのコピー
  5. ソリューションを保存してビルドします。
  6. 画像を追加して、気をつけてください、またはZIndex値。
  7. その後、画像を複数回使用するか、同じ画像コントロール上の別の画像に変更して、XAMLまたは画像コントロールプロパティで画像のパスを次のように変更しようとすると、自分を見つけました。

    source="pack:://siteoforigin:,,,/Resources/image.png"
    
4
Mohamed Hussein

設計時の画像データを表示するためにここに来ました(逆問題)。

ImagePath="pack://application:,,,/MyApplicationName;component/Images/Icons/Button1.png"は、Build ActionResourceに設定され、Copy to Output DirectoryCopy if newerに設定されていることに加えて、トリックを実行したものです。

3
Dirk Bester

最も簡単な方法は、プロジェクトに画像を追加することです。ソリューションエクスプローラーを右クリックして、プロジェクトにリソースフォルダーを追加->追加->フォルダー(リソースに名前を付ける)->新しく作成したリソースフォルダーを右クリック->既存のアイテムを追加->画像を検索(すべてのファイルを選択)

選択したxamlフォームに画像アイテムを追加します。 [プロパティ]-> [共通]-> [ソース]で、ドロップダウンして画像を選択できるはずです。

ドロップダウンから選択

それは今日私が先ほどやったことと同じくらい簡単かもしれません。ソリューションで参照せずに、フォルダーにファイルを配置しました。設計中にうまく表示されました。

1
Mark Bonafe

同じ問題がありました。
これで動作します...
これを試して:

<Button x:Name="b2" HorizontalAlignment="Left" VerticalAlignment="Top"
    Width="26" Height="29"> 
    <Button.Background> 
        <ImageBrush ImageSource=" a.png"/> 
    </Button.Background>
</Button>
1
Santhakumar

最初にこれを試さないかもしれない人に、ここで言及した修正のいくつかを試しても何も機能しない場合は、ソリューションのクリーニングと再構築を試してください。プロジェクトに画像を追加するのを忘れました(画像フォルダを作成、フォルダを右クリック->既存を追加->画像をクリック)。

それは私がきれいにして再構築するまでそれを修正しませんでした。

1
trueCamelType

画像がソリューションに含まれているかどうかを確認してください。画像が含まれていない場合は、ソリューションの[すべてのファイルを表示]をクリックし、画像を右クリックして[プロジェクトに含める]オプションを選択します。その後、相対パスでも機能します。

例:

"Source ="/Images/Logo/close.png ""

1
Chetan Verve

次は私のために働いた:

•ビルドアクション=リソース

•出力ディレクトリにコピー=コピーしない

xaml:

<Image Source=“Rsources/myPic.png”/>

「myPic.png」は「Resources」フォルダー内の画像です

1
Nehorai

DLLのイメージを使用している場合は、dllプロジェクトにProjectのプロパティでデフォルトのリソースファイルが設定されていることを確認してください。アクセス修飾子をpublicに変更します。また、イメージのビルドアクションを「リソース」に設定します

1
Joish

単に相対パスを使用することもできます:

<Button Name="Button1" Click="Button1_Click">
    <Button.Content>
        <Image Source="Icons/Button1.png" />
    </Button.Content>
</Button>
1
MyKuLLSKI

1-ファイルイメージのプロパティをリソースに変更します。{イメージファイルを右クリックします-> [プロパティ]を選択します-> [ビルドアクションをリソースに切り替えます]。

2-このタグを使用して画像を表示します

 <Image Source="pack://application:,,,/[Put here the Main Namespace];component/[File path]"/>

<Image Source="pack://application:,,,/My;component/Resources/switch-off.png"/>
0
AbuDawood

すべての非常に良い答え。私はこれを上で見ませんでした、そして、それは単純で明白ですが、確かに元の投稿の症状を引き起こします。急いでいるときは忘れがちです。

画像をプロジェクトにドラッグアンドドロップした場合は、ファイルが「プロジェクトに含まれている」ことを確認してください。これは、コンテキストメニューからすばやく利用できます。

0
Alan

画像がウィンドウと同じプロジェクトにありません

[ソリューションエクスプローラー]> [プロジェクト名]> [リソース]に移動して問題を解決し、イメージを選択してビルドアクションリソースに変更します。

0
Bruno Henn

私の場合、2つの手順(プロパティウィンドウ)に従う必要がありました。
1)ビルドアクション(すべてのリソースファイル)を「リソース」に変更します。
2)[ソース]フィールドで目的の画像を(もう一度)選択します。

0
DiogoA.

UWPでは、ビルドアクションの「リソース」選択はありませんが、「コンテンツ」の選択は機能し、他の* .pngファイルが入ったものです。私のために働いていなかったものは、何らかの理由で「EmbeddedResource」として入ってきました。提案をありがとう。

0
Bob Krauth

同様の問題に遭遇しました。最初は次の形式を使用していました(クラスライブラリプロジェクトの下)。

<Image Source="pack://siteoforigin:,,,/Images/Toolbars/Legend.png"/>

ただし、ソリューションをクリーン/ビルドまたは再ビルドしたり、Visual Studioを再起動したりすると、XAMLデザイナーでボタンの画像が表示されていても、ボタンの画像が消えます。

私は奇妙な解決策を思いついたが、それは私のために働いた。このソリューションを使用すると、実行時および設計時にXAMLにイメージが常にそのまま残ります。

このソリューションでは、メインアプリケーションとクラスライブラリプロジェクトの両方に、同じイメージ名の2つのフォルダー(リソースと呼びます)が必要です。プロジェクトの下で

<Image Source="pack://application:,,,/Resources/Legend.png"/> 

イメージの場合、BuildAction = Resource&Copy to OutputDirectory =両方の場所にコピーしないでください。

メインアプリケーションでリソースフォルダーのみを使用しても機能しますが、今回はXAMLデザインタイムパーサーで画像を表示できません。そのため、クラスライブラリ(XAML UserControlがある場所)で同じフォルダーを複製しました。

この複雑さの理由は、XAMLパーサーの内部動作にある可能性があります。設計時の部分は、UserControlが配置されているプロジェクトの下のフォルダーの場所を常に参照しますが、実行時の部分では、適切に実行するためにメインアプリケーションに画像が必要です。

私はこれが適切な解決策または合理的な解決策であるとはまったく主張していませんが、私の場合はうまくいきました。改善または改善されたソリューションに対するコメントを歓迎します。

更新:試行錯誤+その他の手がかり( https://docs.Microsoft.com/en-us/previous-versions/dotnet/netframework-4.0/aa970069(v = vs.100) )、私はより簡単な解決策を考え出しましたが、それは機能します(私にとって)

リソースで宣言:

<BitmapImage x:Key="mLegend" UriSource="pack://siteoforigin:,,,/Images/Toolbars/Legend/Legend.png"/>

button宣言の下で:

<Image Source="{StaticResource mLegend}"/>

buildAction = Content&Copy to OutputDirectory = Copy if newを設定します

最後のステップとして、ソリューションをクリーンおよびビルドします。

0
Matt Allen

たぶん、これはVisual Studio 2019で誰かを助けるでしょう。私は単純な/

手順:プロジェクトを右クリック-[追加]> [既存のアイテム]-追加する画像を選択-Visual Studioで画像をクリック-プロパティに移動-[ビルドアクション]を[変更]に変更

いいえ、Xamlにアクセスしてリソースを追加します

<UserControl.Resources> <Image x:Key="ButtonImage" Source="/image.jpg"/> </UserControl.Resources>

イメージ名の前の/は必須です。 /がないと、xamlで動作しているように表示されますが、プログラムを起動すると表示されません。

<Button Content="{StaticResource ButtonImage}"></Button>

これを読んだら、それが修正されることを願っています

0
Traxes
  1. フォルダ「アイコン」をプロジェクト「画像」にドラッグ&ドロップするだけです。
  2. 相対パス:Image Source = "Icons/Button1.png"を使用します。
0
Ted