すべて、埋め込みブラケットの一貫性について.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>
イメージには「ビルドアクション=リソース」、「出力ディレクトリにコピー=コピーしない」があります-イメージはデザイナーには表示されますが、実行時には表示されません。次の質問を見て関連する回答を読みましたが、問題を解決できるものはありません。
実行時にボタン画像を表示するにはどうすればよいですか?
ビルドアクションを「リソース」に変更します。また、パックのURLが間違っています。次のいずれかを使用します。
Source="pack://application:,,,/Resource/UserCost2013Open16.png"
または単に
Source="/Resource/UserCost2013Open16.png"
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
私の場合、Common
という名前の別のプロジェクトに画像があり、画像はこのプロジェクトのResources
という名前のフォルダーの下にありました。私の他のプロジェクトでは、Common
への参照を追加し、次のように画像のソースを設定しました。
<Image Source="/Common;component/Resources/anImage.png"/>
画像にはBuild Action
に設定Resource
およびCopy to Output Directory
からDo not copy
。ただし、何らかの奇妙な理由で、ソリューション内のすべてのアセンブリファイルを削除してClean Solution
およびBuild Solution
。理由はわかりませんが、すべてを再構築すると実行時にすべて動作し始めました。それでも、なぜデザインタイムで機能していたのかわかりません。
あなたが持っていると仮定して
Build Action
をResource
に設定します
URI-PACK-FORMAT
を使用してそのパスを正しく設定します
私の場合、まだ表示されていませんでした。
Clean & Rebuild
Buildだけでなく、私のためにそれを修正しました!
Visual StudioのSolution Explorerの中に何かを追加する必要があります。 Windowsエクスプローラーでフォルダーに画像をコピーする代わりに、ソリューションエクスプローラーで任意のフォルダーを右クリックし、追加>既存項目...に移動して、追加するリソースへのパスを選択します。
リソースフォルダーにある画像に移動し、画像を右クリックして、プロパティに移動します。 BuildActionプロパティをクリックして、リソースをnoneから設定します。動作します。
次のように画像を定義しました:
<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"/>
Source = "file:/// D:/100x100.jpg" />は私のために機能します。