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

问题描述 投票:0回答:12

所有,我有一个小应用程序的启动,用于检查 .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 中未显示

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

c# wpf image button
12个回答
91
投票

将构建操作更改为“资源”。 另外你的包地址也是错误的。要么使用:

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

或者简单地

Source="/Resource/UserCost2013Open16.png"

36
投票

有2个解决方案:

1:更改图像的设置:

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


2:当在源路径中使用 application 而不是 siteoforigin 时,您必须采用可能的方法:

a) 图像将位于名为“Resources”的子文件夹中,并且 .exe 文件将很小

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

b) 图像将包含在 .exe 中,并且不存在包含图像文件的子文件夹

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

14
投票

假设您已将

Build Action
设置为
Resource

使用

URI-PACK-FORMAT

pack://application:,,,/ResourceFile.xaml
pack://application:,,,/Subfolder/ResourceFile.xaml
pack://application:,,,/ReferencedAssembly;component/ResourceFile.xaml

这些是最常见的例子。

另外,就我而言,它仍然没有显示。

Clean & Rebuild
不只是构建为我修复了它(VS 2019)!


8
投票

就我而言,我将图像放在一个名为

Common
的单独项目中,并且图像位于该项目中名为
Resources
的文件夹下。在我的另一个项目中,我添加了对
Common
的引用并设置图像的来源,如下所示:

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

图像的

Build Action
设置为
Resource
,并且
Copy to Output Directory
设置为
Do not copy
。然而,由于某种奇怪的原因,直到我删除了解决方案中的每个程序集文件并制作了
Clean Solution
Build Solution
后,它才起作用。不知道为什么,但一旦我重建了一切,一切就开始在运行时工作。我仍然不明白为什么它在设计时工作。


6
投票

转到资源文件夹中的图像,右键单击该图像,转到属性,单击“构建操作”属性,然后将其从“无”更改为“资源”。这样就可以了。


5
投票

在 Visual Studio 中执行以下步骤

  1. 将图像添加到您想要命名的文件夹中,在本示例中,我创建了一个
    Assets
    命名文件夹。
  2. 然后将图像的属性设置为
    Resource
    中的
    Build Action
  3. 然后选择文件夹中的图像并将其拖放到
    <MenuItem.Icon>
    中,它应该正确路径。

  • 请注意,您可能需要重建项目,编译器有时不会将新资源识别为需要重建。

4
投票

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


4
投票

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

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

图像显示在Visual Studio设计器中,但当我启动应用程序时没有显示图像!这让我抓狂! 我用 clean/build 尝试了所有Build Action,但没有成功。

在我的例子中,问题是由于控件(使用Image)和应用程序本身位于不同的项目中引起的。 Resources/Images文件夹位于Controls项目中。结果,应用程序尝试在自己的 Debug 文件夹中查找 icon.png,但实际上它位于 Controls' Debug 文件夹中。

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

1)将资源/图像放入应用程序的项目中(当有多个项目使用Controls项目中的控件时不太好,但它可以工作)

2) 在 Image:

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

0
投票

创建一个新文件夹并将图片放入新文件夹中并用 XAML 编写

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

0
投票

对我来说,将“构建操作”更改为“资源”,将“复制到输出目录”更改为“不复制”已经解决了我的问题。


0
投票

万一有人到达这里并将图像设置为“资源”和“不复制”,但它仍然不起作用,我可以通过将图像的构建操作从“资源”切换回来然后再返回来解决此问题再次。


-6
投票

Source="file:///D:/100x100.jpg"/> 对我有用。

© www.soinside.com 2019 - 2024. All rights reserved.