【问题标题】:How can I set the WPF BitmapImage UriSource property to a relative path?如何将 WPF BitmapImage UriSource 属性设置为相对路径?
【发布时间】:2010-07-05 14:51:42
【问题描述】:

我正在使用 BitmapImage 类在 WPF 中加载图像。当我为 UriSource 提供绝对路径时,我的代码可以完美运行,但当我尝试使用相对路径时却不行。

我的 XAML 是:

<Image Width="50" Name="MemberImage" HorizontalAlignment="Left">
    <Image.Source>
        <BitmapImage DecodePixelWidth="50" UriSource="questionmark.jpg" />
    </Image.Source>
</Image>

questionmark.jpg 被添加到项目中,并将资源的构建操作和复制到输出目录设置为始终复制。我得到的错误是“文件 [文件名] 不是项目的一部分,或者它的‘构建操作’属性未设置为‘资源’”。当我为 UriSource 使用绝对路径但显然不行时,这有效。

我应该如何在 XAML 中定义我的 UriSource?

【问题讨论】:

    标签: wpf uri bitmapimage


    【解决方案1】:

    我认为一旦图像在资源中,您就不需要将其复制到输出目录。

    正确的指定方式是

    <BitmapImage 
        x:Key  = "Logo"
     UriSource = "pack://application:,,,/ApplicationNamespace;component/Images/App/image.png"  
    />
    

    只需替换

    ApplicationNamespace 与您的应用程序命名空间

    Images/App/image.png 加上你在项目中的图片路径

    【讨论】:

    • 不应该是UriSource = "pack://application:,,,/ApplicationNamespace" 而不是UriSource = "pack://application:,,,/ApplicationNamespace;component/Images/App/image.png" 吗?
    • 在我的测试中,ApplicationNamespace 应该替换为程序集的名称(如项目属性中所示),而不是项目的默认命名空间。
    【解决方案2】:

    属性中具有以下选项的图像文件
    构建操作=内容
    复制到输出目录=如果更新则复制

    <BitmapImage x:Key="QuestionMark" UriSource="pack://siteoforigin:,,,/questionmark.png"/>
    


    参考:
    Xaml - Bitmap UriSource - absolute path works, relative path does not, why?

    【讨论】:

      【解决方案3】:

      我无法在我的计算机上重现该问题:

      • 我通过在“项目”菜单中选择“添加现有项目”来添加 jpg
      • 然后我将其 Build Action 设置为 Resource 并将 Copy to Output 目录设置为 always。
      • 我的 XAML 是一样的。

      即使在移动 .exe 并重命名 jpg 之后,也可以在这里完美运行。一定有别的东西在咬你!

      【讨论】:

      • 是的,是的。我现在看了一点,文件没有被复制到输出目录,尽管你已经设置为“资源”和“总是复制”。知道为什么副本不会完成吗?
      • 如果我将构建操作更改为内容,则文件被复制,但输出目录中的版本不可用,因为 XAML 中的相同错误“文件 [文件名] 不是项目或其“构建操作”属性未设置为“资源”。”手动将其复制到输出目录,在解决方案中将其设置为“资源”并重建项目会产生相同的错误。
      • 当您将构建操作设置为“资源”时,jpg 嵌入在 .exe 或 .dll 中,因此无法单独识别。所以这是预期的结果。您似乎没有在项目中包含该文件:单击“项目”菜单并选择“添加现有项目”。那应该可以解决它。
      • Dabblernl,它已添加到我的项目中 - 这就是我最初添加它的方式 - 所以它不可用还有其他一些原因。
      • 很抱歉 Val,我无法重现该错误。从一个新的小项目重新开始,看看会发生什么。如果按预期工作,请尝试向这个新项目添加功能,使其看起来更像真实项目。希望你会偶然发现问题所在。祝你好运!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-06-26
      • 2011-08-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-02
      • 2014-12-26
      相关资源
      最近更新 更多