所有,我有一个小应用程序的启动,用于检查 .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>
图像具有“构建操作 = 资源”、“复制到输出目录 = 不复制”-图像显示在设计器中,但不在运行时显示。我看过以下问题并阅读了相关答案,但没有解决问题:
如何让按钮图像在运行时显示?
将构建操作更改为“资源”。 另外你的包地址也是错误的。要么使用:
Source="pack://application:,,,/Resource/UserCost2013Open16.png"
或者简单地
Source="/Resource/UserCost2013Open16.png"
有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
假设您已将
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)!
就我而言,我将图像放在一个名为
Common
的单独项目中,并且图像位于该项目中名为 Resources
的文件夹下。在我的另一个项目中,我添加了对 Common
的引用并设置图像的来源,如下所示:
<Image Source="/Common;component/Resources/anImage.png"/>
图像的
Build Action
设置为 Resource
,并且 Copy to Output Directory
设置为 Do not copy
。然而,由于某种奇怪的原因,直到我删除了解决方案中的每个程序集文件并制作了 Clean Solution
和 Build Solution
后,它才起作用。不知道为什么,但一旦我重建了一切,一切就开始在运行时工作。我仍然不明白为什么它在设计时工作。
转到资源文件夹中的图像,右键单击该图像,转到属性,单击“构建操作”属性,然后将其从“无”更改为“资源”。这样就可以了。
您应该在 Visual Studio 的 Solution Explorer 中添加任何内容。 不要只是将图像复制到 Windows 资源管理器中的文件夹,而是右键单击解决方案资源管理器中的任何文件夹,转到添加 > 现有项目...,然后选择要添加的资源的路径。
我将我的图像定义为下一个:
<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"/>
创建一个新文件夹并将图片放入新文件夹中并用 XAML 编写
<Image Source="/newfolder/icon.png"/>
对我来说,将“构建操作”更改为“资源”,将“复制到输出目录”更改为“不复制”已经解决了我的问题。
万一有人到达这里并将图像设置为“资源”和“不复制”,但它仍然不起作用,我可以通过将图像的构建操作从“资源”切换回来然后再返回来解决此问题再次。
Source="file:///D:/100x100.jpg"/> 对我有用。