下面是一个将字符串(来自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;
}
}
}
答案 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"/>