1.问题描述
Image控件的Source绑定后图片被占用,此时无法删除或在别处使用此图片,会导致报错。
解决方法:通过转换的方式,不直接将图片路径绑定到Source,而是将需要绑定的图片读取字节并释放,创建BitmapImage对象,使用读取的字节初始化BitmapImage。
2.代码
xaml代码
<Window.Resources>
<comm:ImageConvert x:Key="string2Img"/>
</Window.Resources>
<Image x:Name="image" Source="{Binding ImgPath, Converter={StaticResource string2Img}}" />
ValueConverter类
public class ImageConvert : IValueConverter
{
/// <summary>
/// 转换图片(解决图片被占用问题)
/// </summary>
/// <param name="value"></param>
/// <param name="targetType"></param>
/// <param name="parameter"></param>
/// <param name="culture"></param>
/// <returns></returns>
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
BitmapImage bitmapImage = null;
using (BinaryReader reader = new BinaryReader(File.Open(value.ToString(), FileMode.Open)))
{
try
{
FileInfo fi = new FileInfo(value.ToString());
byte[] bytes = reader.ReadBytes((int)fi.Length);
reader.Close();
bitmapImage = new BitmapImage();
bitmapImage.CacheOption = BitmapCacheOption.OnLoad;
bitmapImage.BeginInit();
bitmapImage.StreamSource = new MemoryStream(bytes);
bitmapImage.EndInit();
}
catch (Exception) {
}
}
return bitmapImage;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return null;
}
}