WPF按钮中的图像在运行时不可见

时间:2013-03-26 11:34:30

标签: c# wpf image button

所有,我有一个小应用程序,它检查.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>

图像具有'Build Action = Resource','Copy to output directory = Do not copy' - 图像显示在设计器中但不在运行时显示。我已经看到了以下问题并阅读了相关答案,但没有解决问题:

  1. WPF control images not displayed when consumed by an application

  2. image problem in wpf (image does not show up)

  3. Background Image of Button not showing in WPF

  4. 如何让按钮图像在运行时显示?

9 个答案:

答案 0 :(得分:66)

将构建操作更改为“资源”。 你的包网址也错了。使用:

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

或只是

Source="/Resource/UserCost2013Open16.png"

答案 1 :(得分:27)

有2个解决方案:

1:更改图像的设置:

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


2:在源路径中使用 应用 而不是 siteoforigin 时,您必须采取以下方式:

a)图像将位于名为“Resources”的SubFolder中,而.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

答案 2 :(得分:7)

在我的情况下,我将图像放在一个名为Common的单独项目中,图像位于此项目中名为Resources的文件夹下。在我的另一个项目中,我添加了对Common的引用,并设置了这样的图像源:

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

图片的Build Action设置为ResourceCopy to Output Directory设置为Do not copy。但是,由于一些奇怪的原因,在我删除解决方案中的每个程序集文件并创建Clean SolutionBuild Solution之前,它不起作用。不知道为什么,但是一旦我重建了一切,它都开始在运行时工作。我仍然无法弄清楚它为何在Design Time工作。

答案 3 :(得分:7)

假设你有

  • 将您的Build Action设置为Resource

  • 使用URI-PACK-FORMAT

  • 正确设置该路径

在我的情况下,它仍未显示。

Clean & Rebuild 不仅仅是Build 为我修复了它!

答案 4 :(得分:2)

您应该在Visual Studio的解决方案资源管理器中添加任何内容。 不要只是在Windows资源管理器中将图像复制到文件夹,而是在解决方案资源管理器中按右键单击任何文件夹,转到添加&gt;现有项目...... 并选择要添加的资源的路径。

答案 5 :(得分:1)

转到资源文件夹中的图像,右键单击图像,转到属性。单击BuildAction属性并将其设置为Resource from none。那会有用。

答案 6 :(得分:1)

我将我的图片定义为下一个:

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

图像显示在 Visual Studio 设计器中,但是当我启动应用程序时没有显示图像!这让我疯了! 我用干净/构建尝试了所有 Build Action ,没有运气。

在我的情况下,问题是由控件(使用 Image )和app本身在不同的项目中引起的。 Resources / Images 文件夹位于 Controls 项目中。结果,应用程序试图在自己的Debug文件夹中找到icon.png,但实际上它位于 Controls &#39;调试文件夹。

所以两种解决方案对我有用:

1)将 Resources / Images 放在应用程序的项目中(当有几个项目使用来自 Controls 项目的控件时效果不太好,但它有效)

2)在 Image

中明确指定Controls项目的名称
<Image Source="/Controls;component/Resources/Images/icon.png"/>

答案 7 :(得分:0)

来源=“file:/// D:/100x100.jpg”/&gt; 适合我。

答案 8 :(得分:0)

新建一个文件夹,然后将图片放在新文件夹中,并用XAML编写

<Image Source="/newfolder/icon.png"/>