wpf C# .NET6引用嵌入式.ico文件在VS中调试失败[重复]

wqsoz72f  于 2023-08-07  发布在  C#
关注(0)|答案(2)|浏览(133)

此问题在此处已有答案

WPF - Import image as resource(3个答案)
Storing WPF Image Resources(11个答案)
13天前关门了。
我在VS C# .NET6 WPF项目的Resource目录中有一个有效的多大小.ico图像文件。这个资源文件被标记为Embedded resource,将包含在二进制文件中。
我尝试用

Uri iconUri = new Uri("pack://application:,,,/Resources/iconfile.ico");
this.Icon = BitmapFrame.Create(iconUri);

字符串
项目中没有编译错误。第二行给出了VS 2022调试器中的运行时错误:System.IO.IOException: Cannot locate resource 'resources/iconfile.ico'.
请帮助我理解为什么这个资源组件对代码不可见。
ChatGPT和论坛档案没有对此做出任何解释。
P.S.它似乎没有抱怨邻居.png文件(也标记为嵌入式资源),我在XAML文件中直接引用它,使用类似的URI作为<Image>Source。最初,我在XAML中也引用了.ico文件,将其分配为<Window>中的Icon,但我在InitialiseComponent();中遇到了相同的运行时错误,因此我决定在.cs中显式引用它,并获得了相同的效果。
我还注意到,我的.ico文件是基于PNG的256x256大小和BMP的所有其他大小的基础上...这和这件事有关系吗?

9rbhqvlz

9rbhqvlz1#

简而言之,你需要用“Resource”构建动作来标记你的文件,* 而不是 *“Embedded resource”。
嵌入式资源用于 manifest resources,您可以使用Assembly.GetManifestResourceStream()等方法加载。这是另一回事
对于WPF从packURI加载资源,需要使用Resourcebuild操作来构建它。

clj7thdc

clj7thdc2#

多尺寸的图标文件需要16x16,32x32,48x48和256x256像素,并需要在整个图像的外边缘周围至少有一个空白像素。检查以确保您的图标没有接触网格的外边缘之一,并且所有大小都使用相同的格式(PNG,BMP等)。
考虑通过在线ICO转换器运行您的源图像,以验证并确保图标正确。
https://convertio.co/png-ico/

相关问题