在代码中设置WPF图像源
我试图在代码中设置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" />
在遇到同样的问题并做了一些阅读之后,我发现了解决方案 - 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
application:
后的三个斜杠application:
必须用逗号代替:
注意:pack URI的权威组件是一个嵌入的URI,指向一个包并且必须符合RFC 2396.此外,“/”字符必须替换为“,”字符和保留字符,如“%”和“?” 必须逃脱。 有关详细信息,请参阅OPC。
当然,确保您将图像上的构建操作设置为Resource
。
var uriSource = new Uri(@"/WpfApplication1;component/Images/Untitled.png", UriKind.Relative);
foo.Source = new BitmapImage(uriSource);
这会在名为“WpfApplication1”的程序集中将其“Build Action”设置为“Resource”的名为“Images”的文件夹中加载名为“Untitled.png”的图像。
这是少一点的代码,可以在一行中完成。
string packUri = "pack://application:,,,/AssemblyName;component/Images/icon.png";
_image.Source = new ImageSourceConverter().ConvertFromString(packUri) as ImageSource;
链接地址: http://www.djcxy.com/p/50427.html