C# 从代码中加载WPF中的图像
我一定在网上读过很多解决方案,但由于某些愚蠢的原因,我无法让它们发挥作用 我在项目的Resources文件夹中有一个.jpg图像,该图像被设置为Build Action:Resource(非嵌入式资源),并且从不复制到output文件夹。 我的图像未添加到我的resources.resx文件中 我正在尝试访问该文件,如下所示: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
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)
图像已添加到项目中:(