Silverlight 3中的XAML转换BaseBase64ToImage转换器

时间:2009-10-13 12:08:48

标签: silverlight silverlight-3.0

下面是一个将字符串(来自sql server数据库)转换为图片的类。 如何从XAML Image控件调用转换函数,以便在打开子窗体时,我将根据主窗体datagrid中选择的行来查看单个员工的图像。基本上,我的问题是 - 我可以调用转换器函数,将在运行时将照片文本转换为图像吗?我试过这样的事...... 我之前使用过代码来做这件事,但我想直接从XAML做到。

XAML: -

<Image x:Name="EmpPic"  
Source=Text="{Binding Photo, Mode=TwoWay, Converter={StaticResource PhotoConverter}" 
    HorizontalAlignment="Center"  
Width="165" 
Height="160" 
    Margin="2,2,2,2"/>

代码: -

    using System;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.IO;
using System.Windows.Media.Imaging;
using System.Windows.Data;

namespace SL3Demo.Utility
{
    //public class PhotoConverter : IValueConverter  
    //{
    //    //public BitmapImage ConvertBase64ToImage(string base64String)
    //    //{
    //    //    //Convert Base64 String to byte[]
    //    //    byte[] imageBytes = Convert.FromBase64String(base64String);

    //    //    BitmapImage bi = new BitmapImage();
    //    //    bi.SetSource(new MemoryStream(imageBytes));

    //    //    return bi;
    //    //}
    //}

    public class PhotoConverter 
    {
        public BitmapImage PhotoConvert(string value)
        {
            byte[] imageBytes = Convert.FromBase64String(value.ToString());
            BitmapImage bi = new BitmapImage();
            bi.SetSource(new MemoryStream(imageBytes));

            return bi;
        }



    }

}

1 个答案:

答案 0 :(得分:0)

它很近但需要多做一些工作。首先是代码,你需要一个IValueConverter的实现: -

public class PhotoConverter : IValueConverter
{
    private BitmapImage PhotoConvert(string value)
    {
        BitmapImage bi = null;
        if (!String.IsNullOrEmpty(value))
        {
          byte[] imageBytes = Convert.FromBase64String(value);
          bi = new BitmapImage();
          bi.SetSource(new MemoryStream(imageBytes));
        }

        return bi;
    }

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        return PhotoConvert((string)value);
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

现在你需要在Xaml中创建一个这个转换器的实例,一个好的地方是UserControls Resources字典: -

<UserControl ...Usual set of xmlns here...
  xmlns:utils="clr-namespace:SL3Demo.Utility;assembly=SL3Demo">

   <UserControl.Resources>
     <utils:PhotoConverter x:Key="PhotoConverter" />
   </UserControl.Resources>

然后在你的图片中: -

<Image x:Name="EmpPic"
    Source="{Binding Photo, Converter={StaticResource PhotoConverter} }" 
    HorizontalAlignment="Center" Width="165" Height="160" Margin="2,2,2,2"/>