【问题标题】:Image databinding XAML, Silverlight, C#, Windows Phone 7.1图像数据绑定 XAML、Silverlight、C#、Windows Phone 7.1
【发布时间】: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


【解决方案1】:

隔离存储文件只能作为流访问。如果您想将图像存储在那里,您将需要在绑定上使用转换器。这些将打开指定的文件,将流加载到内存中并返回位图图像源。 它们不只是返回一个文件名。

相对路径(例如您的示例)用于存储为 Silverlight DLL 中的应用程序资源或托管网站资源(取决于前导斜杠和程序集名称等)的图像。

这个答案有一个转换器你可以试试:Windows Phone 7 Silverlight binding image from the IsolatedStorage

【讨论】:

  • 谢谢。我最初有实际加载图像的代码,然后我想,等等,当我可以将流指向文件名时,为什么要返回它。您的解释帮助我更好地理解了一切是如何运作的。
猜你喜欢
  • 1970-01-01
  • 2014-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-23
  • 2023-03-18
  • 2013-06-08
相关资源
最近更新 更多