Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从代码中加载WPF中的图像_C#_.net_Wpf - Fatal编程技术网

C# 从代码中加载WPF中的图像

C# 从代码中加载WPF中的图像,c#,.net,wpf,C#,.net,Wpf,我一定在网上读过很多解决方案,但由于某些愚蠢的原因,我无法让它们发挥作用 我在项目的Resources文件夹中有一个.jpg图像,该图像被设置为Build Action:Resource(非嵌入式资源),并且从不复制到output文件夹。 我的图像未添加到我的resources.resx文件中 我正在尝试访问该文件,如下所示: lResult = new BitmapImage(new Uri(@"pack://application:,,,/Resources/ImageMissing.jpg

我一定在网上读过很多解决方案,但由于某些愚蠢的原因,我无法让它们发挥作用

我在项目的Resources文件夹中有一个.jpg图像,该图像被设置为Build Action:Resource(非嵌入式资源),并且从不复制到output文件夹。 我的图像未添加到我的resources.resx文件中

我正在尝试访问该文件,如下所示:

lResult = new BitmapImage(new Uri(@"pack://application:,,,/Resources/ImageMissing.jpg", UriKind.Absolute));
但这并不是说那里没有图像

这太基本了,我觉得自己很愚蠢,但我似乎无法理解资源使用的简单概念

谢谢。

试试这个:

var icon = BitmapFrame.Create(Application.GetResourceStream(
new Uri("MyAppBitmap.jpg", UriKind.RelativeOrAbsolute)).Stream);

你还需要一个逗号。这是有关的文档。请注意,使用权限时有三个逗号

lResult = new BitmapImage(new Uri(@"pack://application:,,,/Resources/ImageMissing.jpg", UriKind.Absolute));

如果您需要指定引用的资源是从本地程序集引用的,那么我认为您应该包括“组件”。例如,我有一些代码从代码所在的同一程序集中可用的资源加载图标。我这样写:

var SourceUri = new Uri("pack://application:,,,/MyCompany.MyProduct.MyAssembly;component/MyIcon.ico", UriKind.Absolute);
thisIcon = new BitmapImage(SourceUri);
如在上提供的文章所述,以下附加示例说明了“组件”的用法:

以下示例显示位于引用程序集项目文件夹根目录中的XAML资源文件的包URI

pack://application:,,,/ReferencedAssembly;component/ResourceFile.xaml
pack://application:,,,/ReferencedAssembly;component/Subfolder/ResourceFile.xaml
pack://application:,,,/ReferencedAssembly;v1.0.0.1;component/ResourceFile.xaml
以下示例显示位于引用程序集的项目文件夹的子文件夹中的XAML资源文件的包URI

pack://application:,,,/ReferencedAssembly;component/ResourceFile.xaml
pack://application:,,,/ReferencedAssembly;component/Subfolder/ResourceFile.xaml
pack://application:,,,/ReferencedAssembly;v1.0.0.1;component/ResourceFile.xaml
以下示例显示了XAML资源文件的包URI,该文件位于引用的特定于版本的程序集项目文件夹的根文件夹中

pack://application:,,,/ReferencedAssembly;component/ResourceFile.xaml
pack://application:,,,/ReferencedAssembly;component/Subfolder/ResourceFile.xaml
pack://application:,,,/ReferencedAssembly;v1.0.0.1;component/ResourceFile.xaml
请注意,引用的程序集资源文件的包URI语法只能与应用程序:///权限一起使用。例如,WPF中不支持以下内容

pack://siteoforigin:,,,/SomeAssembly;component/ResourceFile.xaml

您是否在解决方案资源管理器中重命名了文件(或文件夹),然后没有清理或重建应用程序


如果您确定URI中的名称与解决方案资源管理器中的名称匹配,请尝试右键单击解决方案并选择“重建”。

问题是图像尚未添加到项目中-仅将其包含在资源文件中是不够的

右键单击项目>添加现有项>浏览并查找并添加图像

那么你所需要做的就是:

myImage = new BitmapImage(new Uri(@"ImageMissing.jpg", UriKind.RelativeOrAbsolute));

您可能将第二个库创建为“类库”,而不是“WPF自定义库”。在类库中创建xaml文件或将图像作为“资源”嵌入WPF是不够的,您的AssemblyInfo.cs文件中可能缺少以下内容:

属性/AssemblyInfo.cs


尝试过,但IO异常相同。@因此-假设它在本地程序集中,并为其生成操作设置为Resource,则应该可以工作。您可以尝试UriKind.RelativeOrAbsolute,但我怀疑这会有什么不同。@So-另外,如果您有.NET Reflector,您可以在其中查看您的资源。这将告诉你组件中的路径,以及它是否确实在那里。你能解释一下如何使用反射器来实现这一点吗?谢谢。@So-打开Reflector,选择文件>打开程序集文件,然后打开程序集。展开顶部节点并查找Resources节点,同时展开该节点。可能有多个条目,但双击每个条目。其中一个是各种资源的列表,第一列是路径。你能分享更多的代码吗?或者这可能有助于
新Uri(“pack://application:,,,/Resources/yourmage.jpg“,UriKind.Absolute)
图像已添加到项目中:(