【问题标题】:Load Images in WPF application在 WPF 应用程序中加载图像
【发布时间】:2010-06-18 18:15:19
【问题描述】:

我对 WPF 不熟悉,只是觉得很困惑。

我正在尝试创建一个小型电脑游戏,并且我想动态显示一些元素。我使用 Image 类并将图像添加到画布中。但我不确定这是否是一个好习惯。我觉得向画布添加控件似乎有点连线。而且我有点担心性能,因为我可能需要很多图像。

真正的问题是,我无法从图像文件中加载图像。我在这样的教科书中看到一个例子(XMAL):

<Image Panel.ZIndex="0" Margin="0,0,0,0" Name ="image1">
    <Image.Source>
        <BitmapImage UriSource="Bell.gif" />
    </Image.Source>
</Image>

将 Bell.gif 添加到项目中的位置。

我尝试将其复制到代码中以创建图像。

new Image { Source = new BitmapImage(new Uri("Blockade.bmp"))}

但是我得到了无效的 Uri 异常。在网上搜索了一番,发现动态加载资源似乎很难。我可以动态加载添加到项目中的文件吗?

如果我使用绝对路径就可以了。但我不能指望每台计算机都会将文件放在同一个位置。我可以使用相对路径吗?

我试过了

new Image { Source = new BitmapImage(new Uri(@"Pictures\Blank Land.bmp", UriKind.Relative)) }

但它不起作用。 (图片为空白)

谢谢。

我删除了代码。我刚刚在 MSDN 的“Pack URIs in WPF”中找到了解决方案。 对于本地程序集中的资源,我可以使用“pack://application:,,,/Blockade.bmp”(绝对)或“/Blockade.bmp”(相对)。 (我一开始没有使用'/') "pack://application:,,,/ReferencedAssembly;component/File.xaml" 用于引用程序集。 (我猜答案的问题是缺少权限部分)

【问题讨论】:

  • 我对你在教科书中找到的可怕例子感到惊讶。首先,它非常冗长:它相当于&lt;Image Source="Bell.gif" Name="image1"/&gt;。其次,任何有价值的 WPF 教科书都不会教您为控件分配名称:它将教您使用数据绑定的正确方法。不管你做什么,我强烈建议你停止阅读那本教科书,把它扔进垃圾箱。或者烧掉它。
  • 顺便说一句,这是哪本教科书,所以我可以警告其他人远离它?
  • 其实ZIndex和Margin是存在的,因为控件是最后添加的,直接拖到窗体上,手动修改值。我不知道为什么,但这就是本书定义资源的方式,通常是样式。看了你的评论,我觉得这本书可能不是WPF专业的(这个话题只有三章)。书名是 Visual C# 2010 Step by Step。谢谢。

标签: c# wpf image


【解决方案1】:

以下作品:

new BitmapImage(new Uri("/MyProject;component/Resources/next.png", UriKind.Relative));

只需将“MyProject”替换为您的项目名称,然后调整图片的路径即可。

确保将图像添加到项目中,并将“BuildAction”设置为“Resource”。

【讨论】:

  • 谢谢。你能解释一下吗?字符串中的分号是什么意思?
  • @LLS - 我不是 100% 确定,但我很确定它只是项目名称和路径之间的分隔符。
  • 不过,这不起作用。 (但也不例外)“BuildAction”默认设置为“Resource”。而且我仍然只能使用绝对 Uri。
  • @LLS - 你能用你用来创建图像的所有代码更新你的问题并将其放入你的窗口吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多