2009-10-13 79 views
1

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

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; 
     } 



    } 

} 

回答

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的好去处将是用户控件资源字典: -

<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"/> 
+0

我想你的代码,但是当我建立我得到这个错误:错误 \t规则中的意外标记无:MarkupExtension :: ='{'TYPENAME(Arguments)? @'}',在'{绑定照片,转换器= {StaticResource PhotoConverter}'。 我是否需要将参数添加到图像的XAML? – 2009-10-15 16:04:22

+0

Source属性中缺少}。 – AnthonyWJones 2009-10-15 17:19:14