【问题标题】:Image in WPF Button not Visible at RuntimeWPF 按钮中的图像在运行时不可见
【发布时间】:2013-03-16 04:30:48
【问题描述】:

所有,我有一个小型应用程序的以下开始,它检查 .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 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

如何让按钮图像在运行时出现?

【问题讨论】:

  • 尝试将构建操作设置为Content。这可能会有所帮助
  • 也试过了。这也无济于事......
  • 在调试应用程序时检查 Visual Studio 中的输出控制台可能会有所帮助。有时它会显示有用的错误(例如绑定错误等)
  • 通常你的 URI 很可能是问题所在,正如 Daniel 所说,看看输出窗口,很可能会抱怨找不到图像源或类似的东西。

标签: c# wpf image button


【解决方案1】:

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

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

或者干脆

Source="/Resource/UserCost2013Open16.png"

【讨论】:

  • 我刚刚使用我最初所做的设计器属性面板重新添加了图像,它提供了与我所拥有的不同的 URI,并且就像您显示的顶部一样 - 这个不工作。我将图像重新添加为资源 - 再次没有运气。我然后重新添加了图像再次 - 这给了我一个URI,就像底部的一个节目...... Taadaa!它奏效了,为什么会发生这种情况我不知道,但很高兴将来知道。感谢您的宝贵时间。
  • @Killercam:我现在经历了非常相似的事情;看看我在this question 中的EDIT3,以了解为什么重新添加可能会有所帮助(尽管不是为什么它只在第二次尝试时才对你有用)。
  • pack://application:,,,/... 在运行时似乎不太被 .XAML 喜欢。引发错误 - “无法识别/无效等等”。我有一个UIDomain 项目,其中包含所有视图、演示者、模型和图像。似乎Resources/*.png 应该在views/ ... ... /Resources/img.png 目录中,而它更像../Resources/img.png
  • 为我工作:)
  • 只需右键单击图像并选择属性并将“构建操作”更改为“资源”。
【解决方案2】:

有 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

【讨论】:

  • 解决方案 2 有效。 Copy to output directory 在我的情况下不是必需的。
  • 工作。谢谢。
【解决方案3】:

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

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

图像的Build Action 设置为ResourceCopy to Output Directory 设置为Do not copy。但是,由于某种奇怪的原因,直到我删除了解决方案中的每个程序集文件并创建了Clean SolutionBuild Solution,它才起作用。不知道为什么,但是一旦我重建了所有东西,它就开始在运行时工作了。我仍然无法弄清楚为什么它在设计时工作。

【讨论】:

  • component 字符串添加到源路径对于让我的图像在运行时显示至关重要。
  • 虽然 Content 和 Always Copy 曾经对我有用,但在移动到另一台机器后,我只在设计器中看到了图像/字体,而不是在运行时。将它们更改为 Resource 并且不要复制已修复它。
【解决方案4】:

您应该在 Visual Studio 的 Solution Explorer 中添加任何内容。 除了将图像复制到 Windows 资源管理器中的文件夹外,还可以在解决方案资源管理器中按右键单击任何文件夹,转到 Add > Existing Item... 并选择要添加的资源的路径。 p>

【讨论】:

    【解决方案5】:

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

    【讨论】:

    • 非常感谢!!为什么MS的官方文档不这么说!???!?!? :)
    【解决方案6】:

    假设你有

    • 将您的Build Action 设置为Resource

    • 使用URI-PACK-FORMAT正确设置该路径

    在我的情况下,它仍然没有显示。

    Clean &amp; Rebuild 不只是构建为我修复了它!

    【讨论】:

    • 所以您的设置与最初的问题完全相同,并且您不需要更改构建操作或复制设置或源路径?
    • 是的。 BuildAction & UriPack 是对的。图片未显示 => Clean &amp; Rebuild 并且有效。
    • @walteronassis 不是问题的根源。
    • 问题是Image in WPF Button not Visible at Runtime 我身边的情况,上面是我的解决方案。我不在乎 -2 rep 但我真的不知道你的问题是什么......?!
    【解决方案7】:

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

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

    图像显示在 Visual Studio 设计器中,但我启动应用程序时没有显示图像!它让我疯了! 我用 clean/build 尝试了所有 Build Action,没有运气。

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

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

    1) 将 Resources/Images 放入应用程序的项目中(当有多个项目使用 Controls 项目中的控件时效果不佳,但它可以工作)

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

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

    【讨论】:

      【解决方案8】:

      Source="file:///D:/100x100.jpg"/> 适合我。

      【讨论】:

        【解决方案9】:

        新建一个文件夹,把你的图片放到新文件夹里,然后用 XAML 写

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

        【讨论】:

          【解决方案10】:

          Visual Studio 2022(但应该可以在其他版本中使用)。将您的图像添加到您想要命名的文件夹中,在此示例中,我创建了一个 Assets 命名文件夹。然后将图片的属性设置为Build Action中的Resource。然后选择文件夹中的图像并将其拖放到&lt;MenuItem.Icon&gt;中,它应该可以正确路径..

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

          【讨论】:

            猜你喜欢
            • 2013-02-08
            • 2022-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多