WPFbutton中的图像在运行时不可见

所有,我有以下开始到一个小的应用程序检查.resx文件的embedded括号的一致性(以便不匹配的“… {0}”string的运行时错误不会发生)。 对于MainWindow.xaml,我有以下XAML,而我的特殊问题涉及要在button上显示的图像

<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> 

图像具有“生成操作=资源”,“复制到输出目录=不复制” – 图像显示在devise器中,但在运行时不显示。 我看到以下问题并阅读相关答案,但没有一个能够解决问题:

  1. WPF控件图像在应用程序使用时不显示

  2. 图像问题在WPF(图像不显示)

  3. 在WPF中不显示button的背景图像

如何让运行时出现button图像?

将构build操作更改为“资源”。 另外你的包地址是错误的。 可以使用:

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

或干脆

 Source="/Resource/UserCost2013Open16.png" 

有2个解决scheme:

1:更改图像的设置:

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

2:在源path中使用应用程序代替siteoforigin时,您必须采取以下可能的方式:

一)图像将在一个名为“资源”的子文件夹和.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设置为ResourceCopy to Output Directory的图像Do not copy 。 但是,由于一些奇怪的原因,直到我删除了我的解决scheme中的每个程序集文件并Build Solution了一个Clean Solution and Build Solution Clean SolutionBuild Solution Clean Solution ,它才工作。 不知道为什么,但是一旦我重build了一切,它就开始在运行时工作了。 尽pipe如此,我仍然无法弄清楚为什么在Design Time工作。

在我的情况下,一个简单的Clean & Rebuild固定它。

您应该在Visual Studio的解决scheme资源pipe理器中添加任何东西。 不要只是将图像复制到Windows资源pipe理器中的文件夹中,请按下右键单击解决scheme资源pipe理器中的任何文件夹,然后select添加>现有项目…,然后select要添加的资源的path。

转到资源文件夹中的图像,右键单击图像,转到属性。 单击BuildAction属性并将其设置为无资源。 这将工作。

我把我的形象定义为下一个:

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

该图像显示在Visual Studiodevise器中,但在启动应用程序时不显示图像! 这让我疯狂! 我尝试了所有构build行动与干净/构build,没有运气。

在我的情况下,问题是由控制(使用图像 )和应用程序本身在不同的项目中引起的。 Resources / Images文件夹位于Controls项目中。 结果应用程序尝试在自己的Debug文件夹中findicon.png,但实际上它在Controls的Debug文件夹中。

所以有两种解决scheme适用于我:

1)把资源/图像放在应用程序的项目中(当有几个项目使用控件项目的控件时,效果不是很好)

2)在Image里面明确指定Controls项目的名称:

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