web-dev-qa-db-ja.com

WPFボタンの画像が実行時に表示されない

すべて、埋め込みブラケットの一貫性について.resxファイルをチェックする小さなアプリケーションを開始します(一致しない「... {0}」文字列の実行時エラーが発生しないように)。 MainWindow.xaml用に次のXAMLがあり、私の特定の問題はボタンに表示される画像に関連しています

<Window x:Class="ResxChecker.MainWindow"
        xmlns="http://schemas.Microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.Microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="174.383" Width="495.869">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto"/>
            <ColumnDefinition Width="350*"/>
            <ColumnDefinition Width="Auto"/>
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="30*"/>
        </Grid.RowDefinitions>
        <Label Content="Select .resx file:" HorizontalAlignment="Left" Margin="10,0,0,0" VerticalAlignment="Top" Height="24" Width="Auto" Grid.ColumnSpan="1"/>
        <TextBox Grid.ColumnSpan="2" HorizontalAlignment="Stretch" Margin="10,0,0,0" Grid.Row="1" TextWrapping="Wrap" Text="" VerticalAlignment="Top"/>
        <Button Grid.Column="2" HorizontalAlignment="Right" Margin="5,0,10,0" Grid.Row="1">
            <Image VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Height="16 " Width="16" Source="pack://siteoforigin:,,,/Resources/UserCost2013Open16.png"/>
        </Button>
    </Grid>
</Window>

イメージには「ビルドアクション=リソース」、「出力ディレクトリにコピー=コピーしない」があります-イメージはデザイナーには表示されますが、実行時には表示されません。次の質問を見て関連する回答を読みましたが、問題を解決できるものはありません。

  1. アプリケーションで使用されたときに表示されないWPFコントロールイメージ

  2. wpfの画像の問題(画像が表示されない)

  3. WPFに表示されていないボタンの背景画像

実行時にボタン画像を表示するにはどうすればよいですか?

49
MoonKnight

ビルドアクションを「リソース」に変更します。また、パックのURLが間違っています。次のいずれかを使用します。

Source="pack://application:,,,/Resource/UserCost2013Open16.png"

または単に

Source="/Resource/UserCost2013Open16.png"
67
Phil

2つのソリューションがあります。

1:画像の設定を変更します。

Build Action = Content
Copy to output directory = Copy if newer
Source="pack://siteoforigin:,,,/Resources/UserCost2013Open16.png"


2:applicationを使用する場合siteoforiginソースパスでは、可能な方法が必要です:

a)画像は「リソース」と呼ばれるサブフォルダーにあり、.exeファイルは小さくなります。

Source="pack://application:,,,/Resources/UserCost2013Open16.png"
Build Action = Content
Copy to output directory = Copy if newer

b)イメージは.exeに含まれ、imagefileのサブフォルダーは存在しません

Source="pack://application:,,,/Resources/UserCost2013Open16.png"
Build Action = Resource
Copy to output directory = Copy if newer
28
Basti

私の場合、Commonという名前の別のプロジェクトに画像があり、画像はこのプロジェクトのResourcesという名前のフォルダーの下にありました。私の他のプロジェクトでは、Commonへの参照を追加し、次のように画像のソースを設定しました。

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

画像にはBuild Actionに設定ResourceおよびCopy to Output DirectoryからDo not copy。ただし、何らかの奇妙な理由で、ソリューション内のすべてのアセンブリファイルを削除してClean SolutionおよびBuild Solution。理由はわかりませんが、すべてを再構築すると実行時にすべて動作し始めました。それでも、なぜデザインタイムで機能していたのかわかりません。

7
Darien Pardinas

あなたが持っていると仮定して

  • Build ActionResourceに設定します

  • URI-PACK-FORMAT を使用してそのパスを正しく設定します

私の場合、まだ表示されていませんでした。

Clean & RebuildBuildだけでなく、私のためにそれを修正しました!

7
Felix D.

Visual StudioのSolution Explorerの中に何かを追加する必要があります。 Windowsエクスプローラーでフォルダーに画像をコピーする代わりに、ソリューションエクスプローラーで任意のフォルダーを右クリックし、追加>既存項目...に移動して、追加するリソースへのパスを選択します。

リソースフォルダーにある画像に移動し、画像を右クリックして、プロパティに移動します。 BuildActionプロパティをクリックして、リソースをnoneから設定します。動作します。

1
Deepak

次のように画像を定義しました:

<Image Source="/Resources/Images/icon.png"/>

画像はVisual Studioデザイナーに表示されますが、アプリを起動したときに画像が表示されません!それは私に夢中になりました!すべてのBuild Action sをclean/buildで試しましたが、運はありません。

私の場合、問題はコントロール(Imageを使用する)とアプリ自体が異なるプロジェクトにあるという事実が原因です。 Resources/ImagesフォルダーはControlsプロジェクトにあります。その結果、アプリは独自のDebugフォルダーでicon.pngを見つけようとしましたが、実際にはControls 'Debugフォルダーにあります。

だから、2つのソリューションが私のために働いています:

1)Resources/Imagesをアプリのプロジェクトに配置します(Controlsプロジェクトのコントロールを使用するプロジェクトがいくつかある場合はあまり良くありませんが、動作します)

2)Image内でControlsプロジェクトの名前を明示的に指定します。

<Image Source="/Controls;component/Resources/Images/icon.png"/>
1
Mari

Source = "file:/// D:/100x100.jpg" />は私のために機能します。

0
Neo