WPF 按钮中的图像在运行时不可见
Posted
技术标签:
【中文标题】WPF 按钮中的图像在运行时不可见【英文标题】:Image in WPF Button not Visible at Runtime 【发布时间】: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>
图像具有“构建操作 = 资源”、“复制到输出目录 = 不复制” - 图像在设计器中显示,但在运行时不显示。我看过以下问题并阅读了相关答案,但没有一个能解决问题:
WPF control images not displayed when consumed by an application
image problem in wpf (image does not show up)
Background Image of Button not showing in WPF
如何让按钮图像在运行时出现?
【问题讨论】:
尝试将构建操作设置为Content
。这可能会有所帮助
也试过了。这也无济于事......
在调试应用程序时检查 Visual Studio 中的输出控制台可能会有所帮助。有时它会显示有用的错误(例如绑定错误等)
通常你的 URI 很可能是问题所在,正如 Daniel 所说,看看输出窗口,很可能会抱怨找不到图像源或类似的东西。
编者注:code formatting should be reserved for code.
【参考方案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
设置为Resource
,Copy to Output Directory
设置为Do not copy
。但是,由于某种奇怪的原因,直到我删除了解决方案中的每个程序集文件并创建了Clean Solution
和Build 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 & Rebuild
不只是构建为我修复了它!
【讨论】:
所以您的设置与最初的问题完全相同,并且您不需要更改构建操作或复制设置或源路径? 是的。BuildAction
& UriPack
是对的。图片未显示 => Clean & 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
。然后选择文件夹中的图像并将其拖放到<MenuItem.Icon>
中,它应该可以正确路径..
【讨论】:
以上是关于WPF 按钮中的图像在运行时不可见的主要内容,如果未能解决你的问题,请参考以下文章