2012-10-12 30 views
2

我在我的wpf页面上有一个图像,该图像从硬盘打开图像文件。用于定义图像的XAML是:如何强制图像控制关闭它在wpf中打开的文件

<Image Canvas.Left="65" Canvas.Top="5" Width="510" Height="255" Source="{Binding Path=ImageFileName}" /> 

我使用卡利Micro和映像文件名称与文件的该图像控制应该显示的名称更新。

当图像被图像控件打开时,我需要更改文件。但该文件被图像控制锁定,我无法删除或复制任何图像。如何强制Image在打开文件后关闭文件,或者需要将文件复制到文件上?

我查了一下,没有CashOptio的图片,所以我不能使用它。

+1

后您获取映像文件名称。你在那里关闭文件吗? – Paparazzi

+0

@Blam:ImageFileName是这样的:c:\ tmp \ testimage.jpg我不打开或关闭它自己。它是打开它而不关闭它的图像控件。 – user1731110

+0

请参阅[这个问题和答案](http://stackoverflow.com/q/12799931/1136211)。在你的情况下,编写一个将文件名转换为ImageSource的绑定转换器是有意义的。 – Clemens

回答

4

您可以使用像下面这样的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(); 
    } 
}