在XAML中绑定图像源

时间:2010-07-29 19:19:56

标签: silverlight xaml image

我正在尝试通过c#

将图像源绑定到我的XAML

这是有效的

<Image Source="images/man.jpg"></Image>

这不起作用

<Image Source="images/{Binding imagesource}"></Image>

其中imagesource是此xaml的c#文件中的字符串变量,并且设置为“man.jpg”

4 个答案:

答案 0 :(得分:3)

你不能在这样的价值中途坚持一个约束力。它既是一种约束,也可能不是。假设您可以通过DataContext公开访问imagesource,您可以这样做:

<Image Source="{Binding imagesource}"/>

但是,如果它被设置为“man.jpg”,那么它将无法找到图像。将imagesource设置为完整路径(“images / man.jpg”)或使用转换器:

<Image Source="{Binding imagesource, Converter={StaticResource RelativePathConverter}}"/>

转换器会将“images /”添加到其值之前。但是,转换器可能需要返回ImageSource而不是string

答案 1 :(得分:3)

这是一种如何在XAML中执行此操作的方法:

将其添加到命名空间:

xmlns:System="clr-namespace:System;assembly=mscorlib"

然后添加您的图片路径

<System:String x:Key="ImageRefresh">/Theme;component/Images/icon_refresh.png</System:String>
<System:String x:Key="ImageSearch">/Theme;component/Images/icon_search.png</System:String>

这就是你使用它的方式

<Image Height="16" Source="{StaticResource ImageSearch}" Stretch="Uniform" Width="16"/>

这样做没问题,但是如果你在Blend中加载你的xaml样式,它就会变得虚伪..

“System.String”类型的对象不能应用于需要“System.Windows.Media.ImageSource”类型的属性。

我还没想到,如何用Media.ImageSource替换System:String ...但是嘿..它在Visual Studio中适用于我。

答案 2 :(得分:1)

图像过去曾经困扰过我。有一定的查询顺序。

使用“image / man.jpg”时,它可以引用silverlight xap中的文件,或者相对于XAP文件的位置。例如,它可能位于YourProject.Web / ClientBin / image / man.jpg。

您应首先使用完整网址进行问题排查,然后查明是否有效。

答案 3 :(得分:0)

imagesource必须是实际的Image对象,而不是string

这是一个方法,它将在给定路径的情况下创建一个新的Image对象:

public BitmapImage Load(string path)
{
    var uri = new Uri(path);
    return new BitmapImage(uri);
}