WPF图像资源

我主要来自网页和一些Windows窗体背景。 对于一个新项目,我们将使用WPF。 出于说明目的,WPF应用程序需要10-20个小图标和图像。 我正在考虑将这些作为嵌入式资源存储在程序集中。 这是正确的路吗?

如何在XAML中指定Image控件应该从嵌入资源加载图像?


如果您将在多个地方使用图像,那么将图像数据只加载到内存中并在所有Image元素之间共享图像数据是值得的。

为此,请创建一个BitmapSource作为某处的资源:

<BitmapImage x:Key="MyImageSource" UriSource="../Media/Image.png" />

然后,在您的代码中,使用如下所示的内容:

<Image Source="{StaticResource MyImageSource}" />

就我而言,我发现我必须将Image.png文件设置为具有Resource的构建操作,而不仅仅是Content 。 这会导致图像被载入您的编译程序集。


我发现使用图片,视频等最佳做法是:

  • 将您的文件“构建操作”更改为“内容” 。 一定要选中Copy to build directory。
  • 在“解决方案资源管理器”窗口的“右键单击”菜单中找到。
  • 图像来源格式如下:
  • “/«YourAssemblyName»;component/«YourPath»/«YourImage.png»”
  • <Image Source="/WPFApplication;component/Images/Start.png" />
    

    优点:

  • 文件没有嵌入到程序集中。
  • 资源管理器会在资源过多的情况下(构建时)引发一些内存溢出问题。
  • 可以在程序集之间调用。

  • 有些人正在询问如何在代码中做这件事,但没有得到答案。

    花了很多时间搜索后,我发现了一个非常简单的方法,我没有找到任何例子,所以我在这里分享我的图片。 (我的是.gif)

    概要:

    它返回一个ImageSource“目标”似乎喜欢的BitmapFrame。

    使用:

    doGetImageSourceFromResource ("[YourAssemblyNameHere]", "[YourResourceNameHere]");
    

    方法:

    static internal ImageSource doGetImageSourceFromResource(string psAssemblyName, string psResourceName)
    {
        Uri oUri = new Uri("pack://application:,,,/" +psAssemblyName +";component/" +psResourceName, UriKind.RelativeOrAbsolute);
        return BitmapFrame.Create(oUri);
    }
    

    学习:

    根据我的经验,包字符串不是问题,请检查您的流,特别是如果第一次读取它时将指针设置为文件结尾,并且在再次读取之前需要将其重新设置为零。

    我希望这可以为你节省很多小时,我希望这篇文章对我有用!

    链接地址: http://www.djcxy.com/p/84587.html

    上一篇: WPF image resources

    下一篇: Good or bad practice? Initializing objects in getter