我的wpf页面上有一个图像,用于打开硬盘的图像文件。用于定义图像的XAML是:
<Image Canvas.Left="65" Canvas.Top="5" Width="510" Height="255" Source="{Binding Path=ImageFileName}" />
我正在使用Caliburn Micro,并且ImageFileName会更新为图像控件应显示的文件名。
当图像通过图像控制打开时,我需要更改文件。但该文件被图像控制锁定,我无法删除或复制任何图像。如何在打开文件或我需要在文件上复制另一个文件时强制图像关闭文件?
我查了一下,图片没有CashOptio,所以我不能用它。
答案 0 :(得分:8)
您可以使用下面的binding converter通过设置BitmapCacheOption.OnLoad将图像直接加载到内存缓存。文件立即加载,之后没有锁定。
<Image Source="{Binding ...,
Converter={StaticResource local:StringToImageConverter}}"/>
转换器:
public class StringToImageConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
object result = null;
string uri = value as string;
if (uri != null)
{
BitmapImage image = new BitmapImage();
image.BeginInit();
image.CacheOption = BitmapCacheOption.OnLoad;
image.UriSource = new Uri(uri);
image.EndInit();
result = image;
}
return result;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotSupportedException();
}
}