我正在尝试在代码中设置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" />
<Image x:Name="_icon" Width="16" Height="16" />
在遇到与您相同的问题并进行了一些阅读之后,我发现了解决方案-Pack URIs。
我在代码中做了以下工作:
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:///
路径:编译为引用程序集的资源文件的名称。路径必须符合以下格式:AssemblyShortName[;Version][;PublicKey];component/Path
AssemblyShortName[;Version][;PublicKey];component/Path
之后的三个斜杠application:必须用逗号替换:
application:
注意:包URI的授权组件是指向包的嵌入式URI,并且必须符合RFC2396。此外,“ /”字符必须替换为“,”字符和保留字符(例如“%”)和“?” 必须逃脱。有关详细信息,请参见OPC。
当然,请确保将图像上的构建操作设置为Resource。
Resource