相对资源的图像来源

9
我正在尝试使用本地资源将图标放置在按钮内。(C# Visual Studio 2012)
我的项目中直接有一个名为“Resources”的文件夹,其中包含“Icons/MyIcon.png”。
以下代码可行(但未使用相对路径)。
<Button Width="20" Height="20">
  <Button.Background>
        <ImageBrush ImageSource="C:\Documents\MyProject\Resources\Icons\MyIcon.png">
          </ImageBrush>
      </Button.Background>

然而,我希望它使用相对路径...所以我尝试了以下内容

  <ImageBrush ImageSource="..\MyProject\Resources\Icons\MyIcon.png">

代码编译成功,但是出现了以下错误:

{"Cannot locate resource 'myproject/resources/icons/myicon.png'."}

然后我找到一篇关于引用该项目的文章,上面写着要做以下操作:
"/[ assembly name ];component[ path within the project ]"

所以我尝试了这个:

<ImageBrush ImageSource="/MyProject;component\Resources\Icons\MyIcon.png">

但它无法工作。

在GUI生成器中可以看到,但当我实际尝试“调试”代码时,它无法运行。

如果我通过添加“123”来更改路径:

 <ImageBrush ImageSource="/MyProject;component\Resources\Icons\MyIcon123.png">

我遇到了一个预编译错误:“找不到指定的文件”。 一旦我删除“123”,错误就消失了。表单中的图标再次显示。 但是当我运行时……我仍然会得到:

{"Cannot locate resource 'resources/icons/myicon.png'."}

发生了什么事?为什么它只能在运行之前找到资源,而我实际开始后却找不到?

然而,我希望它使用相对路径...所以我尝试了以下方法:首先要考虑的是这个文件是否被声明为嵌入式资源或独立内容。如果这是一个内容,那么这个解决方案有效 - mins
4个回答

9
您需要将图片的BuildAction设置为Resource吗?它是否被编译到程序集中?或者您是将其视为Content?在这种情况下,您需要将BuildAction设置为Content,并适当设置CopyToOutputDirectory。这里是一篇MSDN文章,讨论了资源、内容文件等问题:这里

直到现在我才看到你的回答。 - 00jt

6
我知道这是一篇旧贴子,但对于VS2013而言,这些示例都没有起作用,现在我必须结合它们所有的方法来引用我的图像资源和URI来源。
"pack://application:,,,/!APP NAME!;component/Resources/Purple.bmp"

当然,将!APP NAME!替换为您自己的应用程序名称。"pack://application:,,,/test1;component/Resources/Purple.bmp"。同时,将Resources/Purple.bmp替换为您的路径。 重要提示:component/是常量,不是路径的一部分。

pack 对我来说是有效的。但是 component/ 不是路径的一部分,它是一个常量。只有 Resources/Purple.bmp 是另一个程序集内的路径。我需要通过文档详细了解如何找到它。 - KargWare

1

我在一篇博客文章这里中涵盖了这个问题。

对于名为“Images”的文件夹,它基本上看起来像这样。如果您的.xaml文件位于不同的文件夹中,则需要执行../Images/favicon.ico。请注意,在任何情况下,您都不需要将项目名称添加到路径的开头。如果您需要更多细节,请参阅本文末尾的示例项目。

<Image Margin="5" Source="/Images/favicon.ico" Height="100"/>

您的方法在Visual Studio编辑器中显示图标,但当我运行它时,它不显示。我没有收到错误消息,只是按钮没有图标。 - 00jt
1
你能把你所拥有的东西发出来吗?我没有看到你使用“Source”的任何地方。 - N_A
我找到了解决方案。感谢您的帮助。 - 00jt
@00jt 我也遇到了同样的问题。你能分享一下你的解决方案吗?谢谢。 - Aakanksha
1
在解决方案资源管理器中,我必须选择图标文件:"Resources\Icons\MyIcon.png",然后在“属性”下,我必须更改“生成操作(Build Action)”为:"Resource",然后我就可以简单地执行以下操作: <Image Source="Resources/Icons/MyIcon.png"></Image> - 00jt
如果这个问题对您有帮助,请考虑给它一个赞?同样,如果Eric的回答被采纳了,也请给他一个赞。 - 00jt

0

对于资源文件夹在应用程序中的图像的相对路径,这对我有效。

  <Image Source="..\Images\down_arrow.gif" />

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接