私は現在、VS Studio 2010、.NET 4.0で働いています。私のシナリオは次のとおりです。
現在、「アイコン」というサブフォルダを含む「画像」というクラスライブラリプロジェクトがあります。現在、私のアイコンはすべてこのプロジェクトに存在し、siteoforiginを介して複数のプロジェクトからアクセスされます。デザイナーではすべてが正常に表示されますが、実行時には画像は表示されません。
私のフォルダ構造は次のとおりです。
すべてのプロジェクトは、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>
siteoforigin
は、実行可能ディレクトリまたはサブディレクトリにコピーされたファイル用です。リソースについては、私の知る限り、application
を権限として使用する必要があります。
パス:Originファイルのサイトの名前。実行可能なアセンブリが起動された場所からの相対パスを含みます。
これは私を夢中にさせました。さまざまな記事に基づいてさまざまなことを試しましたが、何も機能しませんでした。私のxamlウィンドウと画像は、実行可能なアセンブリとは別のDLLにあります。それが私の問題の一部であったかどうかはわかりません。
最終的に私は成功しました:
私の画像用にフォーマットされた文字列ビジュアルスタジオは次のとおりです。
<Image Source="/Paperless.Common;component/Resources/Checkbook.png" />
ここで、「Paperless.Common」はアセンブリの名前で、「Checkbook.png」は「Resources」フォルダーにある私の画像でした。
画像のビルドアクションがリソースに設定されていない可能性があります。埋め込みリソースを含むそれ以外の場合、実行時に適切に表示されません。
まあ、私はこの問題に3時間以上の時間を費やしました。あなたの答えは私が問題を部分的に解決するのを助けました、そしてそれは私がこの有用な議論に加えることを私に促したものです。
私は私の問題を次のように解決しました:
その後、画像を複数回使用するか、同じ画像コントロール上の別の画像に変更して、XAMLまたは画像コントロールプロパティで画像のパスを次のように変更しようとすると、自分を見つけました。
source="pack:://siteoforigin:,,,/Resources/image.png"
設計時の画像データを表示するためにここに来ました(逆問題)。
ImagePath="pack://application:,,,/MyApplicationName;component/Images/Icons/Button1.png"
は、Build Action
がResource
に設定され、Copy to Output Directory
がCopy if newer
に設定されていることに加えて、トリックを実行したものです。
最も簡単な方法は、プロジェクトに画像を追加することです。ソリューションエクスプローラーを右クリックして、プロジェクトにリソースフォルダーを追加->追加->フォルダー(リソースに名前を付ける)->新しく作成したリソースフォルダーを右クリック->既存のアイテムを追加->画像を検索(すべてのファイルを選択)
選択したxamlフォームに画像アイテムを追加します。 [プロパティ]-> [共通]-> [ソース]で、ドロップダウンして画像を選択できるはずです。
それは今日私が先ほどやったことと同じくらい簡単かもしれません。ソリューションで参照せずに、フォルダーにファイルを配置しました。設計中にうまく表示されました。
同じ問題がありました。
これで動作します...
これを試して:
<Button x:Name="b2" HorizontalAlignment="Left" VerticalAlignment="Top"
Width="26" Height="29">
<Button.Background>
<ImageBrush ImageSource=" a.png"/>
</Button.Background>
</Button>
最初にこれを試さないかもしれない人に、ここで言及した修正のいくつかを試しても何も機能しない場合は、ソリューションのクリーニングと再構築を試してください。プロジェクトに画像を追加するのを忘れました(画像フォルダを作成、フォルダを右クリック->既存を追加->画像をクリック)。
それは私がきれいにして再構築するまでそれを修正しませんでした。
画像がソリューションに含まれているかどうかを確認してください。画像が含まれていない場合は、ソリューションの[すべてのファイルを表示]をクリックし、画像を右クリックして[プロジェクトに含める]オプションを選択します。その後、相対パスでも機能します。
例:
"Source ="/Images/Logo/close.png ""
次は私のために働いた:
•ビルドアクション=リソース
•出力ディレクトリにコピー=コピーしない
xaml:
<Image Source=“Rsources/myPic.png”/>
「myPic.png」は「Resources」フォルダー内の画像です
DLLのイメージを使用している場合は、dllプロジェクトにProjectのプロパティでデフォルトのリソースファイルが設定されていることを確認してください。アクセス修飾子をpublicに変更します。また、イメージのビルドアクションを「リソース」に設定します
単に相対パスを使用することもできます:
<Button Name="Button1" Click="Button1_Click">
<Button.Content>
<Image Source="Icons/Button1.png" />
</Button.Content>
</Button>
1-ファイルイメージのプロパティをリソースに変更します。{イメージファイルを右クリックします-> [プロパティ]を選択します-> [ビルドアクションをリソースに切り替えます]。
2-このタグを使用して画像を表示します
<Image Source="pack://application:,,,/[Put here the Main Namespace];component/[File path]"/>
例
<Image Source="pack://application:,,,/My;component/Resources/switch-off.png"/>
すべての非常に良い答え。私はこれを上で見ませんでした、そして、それは単純で明白ですが、確かに元の投稿の症状を引き起こします。急いでいるときは忘れがちです。
画像をプロジェクトにドラッグアンドドロップした場合は、ファイルが「プロジェクトに含まれている」ことを確認してください。これは、コンテキストメニューからすばやく利用できます。
画像がウィンドウと同じプロジェクトにありません
[ソリューションエクスプローラー]> [プロジェクト名]> [リソース]に移動して問題を解決し、イメージを選択してビルドアクションをリソースに変更します。
私の場合、2つの手順(プロパティウィンドウ)に従う必要がありました。
1)ビルドアクション(すべてのリソースファイル)を「リソース」に変更します。
2)[ソース]フィールドで目的の画像を(もう一度)選択します。
UWPでは、ビルドアクションの「リソース」選択はありませんが、「コンテンツ」の選択は機能し、他の* .pngファイルが入ったものです。私のために働いていなかったものは、何らかの理由で「EmbeddedResource」として入ってきました。提案をありがとう。
同様の問題に遭遇しました。最初は次の形式を使用していました(クラスライブラリプロジェクトの下)。
<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を設定します
最後のステップとして、ソリューションをクリーンおよびビルドします。
たぶん、これはVisual Studio 2019で誰かを助けるでしょう。私は単純な/
手順:プロジェクトを右クリック-[追加]> [既存のアイテム]-追加する画像を選択-Visual Studioで画像をクリック-プロパティに移動-[ビルドアクション]を[変更]に変更
いいえ、Xamlにアクセスしてリソースを追加します
<UserControl.Resources> <Image x:Key="ButtonImage" Source="/image.jpg"/> </UserControl.Resources>
イメージ名の前の/は必須です。 /がないと、xamlで動作しているように表示されますが、プログラムを起動すると表示されません。
<Button Content="{StaticResource ButtonImage}"></Button>
これを読んだら、それが修正されることを願っています