使用转换器在Silverlight中设置Image的source属性

时间:2011-07-01 21:17:04

标签: silverlight silverlight-4.0 c#-4.0 silverlight-3.0

我有一个页面,我想在控件模板中显示图像。为此,我只获得要显示的图像名称。所以我使用转换器返回BitmapImage,如下所示:

return new BitmapImage(new Uri(value.ToString(), UriKind.RelativeOrAbsolute));   

在XAML绑定中我有:

Image Source="{Binding ThumbNail,Converter={StaticResource MapImagePath}}"/>

由于某些原因,我根本无法看到图像。

我已将图片扩展名更改为.jpeg但仍然无效。

我做错了什么或建议我,如果我错了。 感谢。

3 个答案:

答案 0 :(得分:1)

修改转换器,使其返回BitmapImage的实例。您的转换器当前正在返回字符串或Uri,但Source属性的实际类型为ImageSource

将字符串转换为BitmapImage是XamlParser为我们所做的一些魔术,但是当我们使用转换器提供值时,我们需要为其提供正确的类型。

答案 1 :(得分:0)

您可以尝试使用ImageFailed事件来检查加载图像时是否抛出任何异常。如果在从Internet加载图像时出现任何网络问题,通常会获得AG_E_NETWORK_ERROR。

我从文件系统运行Silverlight应用程序时遇到了这个问题,这是使用内置Web服务器在Visual Studio 2010中的默认设置。我将托管Web应用程序移动到本地IIS服务器,然后图像可见。

答案 2 :(得分:0)

  1. 首先将您的图片属性更改为内容。[右键单击您的图片,转到属性并将构建操作从资源更改为内容

  2. 现在假设我们需要“/Resources/Images/1.png”文件。

  3. 在转换器中编写类似下面的代码。

    public object Convert(object value, Type targetType, object parameter,  System.Globalization.CultureInfo culture)
    {
        BitmapImage bitmap = new BitmapImage();
        Uri uri = new Uri(@"Resources/Images/1.png", UriKind.Relative);
        bitmap .SetSource(Application.GetResourceStream(uri).Stream);
        return bitmap ;
    }