对于一个WPF应用程序,它将需要10 - 20个小图标和图像用于说明目的,将它们作为嵌入式资源存储在程序集中是正确的方法吗?
如果是这样,我如何在XAML中指定图像控件应该从嵌入式资源加载图像?
对于一个WPF应用程序,它将需要10 - 20个小图标和图像用于说明目的,将它们作为嵌入式资源存储在程序集中是正确的方法吗?
如果是这样,我如何在XAML中指定图像控件应该从嵌入式资源加载图像?
当前回答
如果要在多个地方使用图像,那么值得将图像数据只加载一次到内存中,然后在所有image元素之间共享。
要做到这一点,在某处创建一个BitmapSource作为资源:
<BitmapImage x:Key="MyImageSource" UriSource="../Media/Image.png" />
然后,在你的代码中,使用如下代码:
<Image Source="{StaticResource MyImageSource}" />
在我的例子中,我发现我必须将Image.png文件设置为资源而不仅仅是内容的构建操作。这将导致在已编译程序集中携带映像。
其他回答
Visual Studio 2010 Professional SP1。 . net Framework 4客户端配置文件。 在项目属性上添加PNG图像作为资源。 自动在资源文件夹中创建新文件。 构建操作集到资源。
这招对我很管用:
<BitmapImage x:Key="MyImageSource" UriSource="Resources/Image.png" />
如果要在多个地方使用图像,那么值得将图像数据只加载一次到内存中,然后在所有image元素之间共享。
要做到这一点,在某处创建一个BitmapSource作为资源:
<BitmapImage x:Key="MyImageSource" UriSource="../Media/Image.png" />
然后,在你的代码中,使用如下代码:
<Image Source="{StaticResource MyImageSource}" />
在我的例子中,我发现我必须将Image.png文件设置为资源而不仅仅是内容的构建操作。这将导致在已编译程序集中携带映像。
是的,这是正确的方法。
你可以在资源文件中使用图像,只使用路径:
<Image Source="..\Media\Image.png" />
您必须将映像文件的构建操作设置为“资源”。
下面工作和待设置的图像是在属性中的资源:
var bitmapSource = Imaging.CreateBitmapSourceFromHBitmap(MyProject.Properties.Resources.myImage.GetHbitmap(),
IntPtr.Zero,
Int32Rect.Empty,
BitmapSizeOptions.FromEmptyOptions());
MyButton.Background = new ImageBrush(bitmapSource);
img_username.Source = bitmapSource;
我发现使用图片、视频等的最佳做法是:
将文件的“构建动作”改为“内容”。请务必勾选“复制到构建目录”。 在“解决方案资源管理器”窗口的“右键单击”菜单中找到。 图片来源格式如下: “/«YourAssemblyName»;组件/«YourPath»和«YourImage.png»”
例子
<Image Source="/WPFApplication;component/Images/Start.png" />
好处:
文件没有嵌入到程序集中。 资源管理器会因为太多的资源(在构建时)而引发一些内存溢出问题。 可以在程序集之间调用。