【发布时间】:2011-10-14 09:44:01
【问题描述】:
我正在为 Windows Phone 7 编写应用程序,虽然我认为我了解如何对字段进行数据绑定,但我无法将图像数据绑定到 XAML 元素。
这就是我在 XAML 中定义图像元素的方式:
<image Source="{Binding ImageLocation}" > </image>
ImageLocation 是一个字符串属性。出于某种原因,如果“ImageLocation”是指向 Internet 上图像的字符串(例如,“http://whatever/image.jpg”),我的图像就会显示,但如果图像存储在本地,它不会显示任何内容在隔离存储上。
确实,图像位于独立存储中名为“图像”的文件夹中。因此,我尝试将 ImageLocation 属性设置为“Images\image.jpg”,但这不起作用。图像根本不显示。我还尝试了很多变体,例如“/Images/image.jpg”、“http://localhost/Images/image.jpg”,以及各种其他奇怪的组合。
我也尝试过这样做:
<image Source="{Binding Path=ImageLocation}"> </image>
但这也没有用。该图像在本地时根本不会显示,但如果它位于远程站点上,它总是可以工作。
我在网上看到过各种使用“转换器”来显示图像的示例。由于我是 C# 和 Silverlight 的新手,我真的不明白为什么我需要一个转换器。据我了解,图像转换器将根据 XAML 元素的要求简单地返回字符串或实际图像数据(我可能错了)。但是,既然我事先知道字符串应该可以工作,那我为什么还要编写这个转换器呢?
除了图片,我所有的其他字段都绑定正确。
以下是关于我的代码设置的一些想法:
我在我的 XAML 页面中定义了一个 ListBox 元素,它有一个 ItemTemplate 和一个 DataTemplate。在其中,我有一个网格,其中有两列分别保存图像和文本字段。
除此之外,我还有一个派生自 IList 的类以支持延迟加载。这个类有一个“ListItems”列表,代表列表框的每一行。 ListItem 具有定义图像的字符串属性以及与它们关联的一些文本。正如我所提到的,文本字段可以正常工作,并且图像仅在 ImageLocation 属性指向 Internet 上的位置而不是独立存储上的位置时才有效。
我已使用独立存储资源管理器工具进行检查,并确保我尝试加载的图像位于独立存储上,因此不是找不到文件的问题。
感谢您的想法或 cmets。
【问题讨论】:
-
创建一个返回图像并绑定到该图像的属性
-
@JonAlb:虽然这样可行,但拥有所有都需要从文件名创建的单独图像属性的灵活性要低得多。最好使用转换器进行大多数绑定转换。这样你就不用在使用后将图像放在内存中了。
标签: c# silverlight windows-phone-7 data-binding isolatedstorage