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