我正在尝试在代码中设置 WPF 图像的源。图像作为资源嵌入到项目中。通过查看示例,我想出了下面的代码。由于某种原因它不起作用 - 图像没有显示。
通过调试我可以看到该流包含图像数据。那么出了什么问题呢?
Assembly asm = Assembly.GetExecutingAssembly();
Stream iconStream = asm.GetManifestResourceStream("SomeImage.png");
PngBitmapDecoder iconDecoder = new PngBitmapDecoder(iconStream, BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.Default);
ImageSource iconSource = iconDecoder.Frames[0];
_icon.Source = iconSource;
该图标的定义如下:<Image x:Name="_icon" Width="16" Height="16" />
在遇到与您相同的问题并进行一些阅读后,我发现了解决方案 -打包 URI http://msdn.microsoft.com/en-us/library/aa970069.aspx.
我在代码中做了以下操作:
Image finalImage = new Image();
finalImage.Width = 80;
...
BitmapImage logo = new BitmapImage();
logo.BeginInit();
logo.UriSource = new Uri("pack://application:,,,/AssemblyName;component/Resources/logo.png");
logo.EndInit();
...
finalImage.Source = logo;
或者更短,通过使用另一个 BitmapImage 构造函数:
finalImage.Source = new BitmapImage(
new Uri("pack://application:,,,/AssemblyName;component/Resources/logo.png"));
URI 分为几个部分:
后面的三个斜杠application:
必须用逗号替换:
注意:pack URI 的权限部分
是一个嵌入的 URI,指向
封装且必须符合 RFC 2396。
此外,“/”字符必须
替换为“,”字符,
和保留字符,例如“%”
和 ”?”必须逃脱。参见OPC
了解详情。
当然,请确保将图像上的构建操作设置为Resource
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)