Silverlight 在XAML中绑定图像源

Silverlight 在XAML中绑定图像源,silverlight,xaml,image,Silverlight,Xaml,Image,我正试图通过c将一个图像源绑定到我的XAML# 这很有效 <Image Source="images/man.jpg"></Image> 这行不通 <Image Source="images/{Binding imagesource}"></Image> 其中,imagesource是此xaml的c#文件中的字符串变量,并被设置为等于“man.jpg”imagesource需要是实际的图像对象,而不是字符串 以下是一种方法,该方法将在给

我正试图通过c将一个图像源绑定到我的XAML#

这很有效

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

这行不通

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


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

imagesource
需要是实际的
图像
对象,而不是
字符串

以下是一种方法,该方法将在给定路径的情况下创建一个新的
图像
对象:

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

不能像那样在值的中间粘贴绑定。要么是装订,要么不是。假设imagesource可通过您的
DataContext
公开访问,则可以执行以下操作:

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

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

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


转换器将在其值前加上“images/”。但是,转换器可能需要返回
图像源
而不是
字符串

以下是在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>
/主题;组件/图像/图标\u refresh.png
/主题;组件/图像/图标搜索.png
这就是你使用它的方式

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

这工作正常,但如果在Blend中加载xaml样式,它将是假的

类型为“System.String”的对象无法应用于需要类型为“System.Windows.Media.ImageSource”的属性


我还没有弄明白,如何用那个媒体替换系统:字符串。ImageSource。。。但是嘿。。在VisualStudio中它对我很有用。

过去,图像一直在折磨我。涉及到特定的查找顺序

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


您应该首先使用完整的URL进行故障排除,并确定这是否有效。

我将imagesource更改为完整路径“images/man.jpg”,但它仍然不起作用。在DataContext中公开访问它是什么意思?我把它的访问修饰符改为public,并为它设置了get函数,但仍然不起作用。你的DataContext是什么?你定好了吗?在Visual Studio的输出窗口中查找绑定错误。Image.Source属性不是字符串,因此这将不起作用。@Digital外科医生:因此,我的答案中的最后一句话。由于某种原因,这不起作用。我的应用程序拒绝加载,只是停留在100%你尝试了完整路径还是相对路径?应该是完整路径。另外,我知道我的方法可以在WPF中工作……也许出于某种原因,它不能在Silverlight中工作。ImageSource作为静态资源在Visual Studio 2012中工作。