我正在尝试通过c#
将图像源绑定到我的XAML这是有效的
<Image Source="images/man.jpg"></Image>
这不起作用
<Image Source="images/{Binding imagesource}"></Image>
其中imagesource是此xaml的c#文件中的字符串变量,并且设置为“man.jpg”
答案 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);
}