WPF数据绑定到图像文件永远锁定该文件[重复]

Posted

技术标签:

【中文标题】WPF数据绑定到图像文件永远锁定该文件[重复]【英文标题】:WPF databinding to imagefile locks that file forever [duplicate] 【发布时间】:2016-06-06 06:27:12 【问题描述】:

我目前正在尝试在 WPF 对话框中显示图像,用户可以随时替换该图像,从而导致该图像文件被覆盖。我的问题是:在我的对话框中显示图像时,图像似乎被 WPF 锁定,所以当我尝试替换它时,它无法访问。

当我上传新图像时,如何强制 WPF 释放图像?这是我的代码的一部分:

XAML:

<Image Margin="6" VerticalAlignment="Center" HorizontalAlignment="Center" Source="Binding ImageFileFullPath"/>

C#:

string sourceFile = openFileDialog.FileName;
string destinationFile = Path.Combine(Environment.ExpandEnvironmentVariables(Constants.ImagePathConstant), destinationFileWithoutPath);
mViewModel.ImageFileFullPath = ""; //temporarily set the image file to another entry hoping WPF releases my image
try

    File.Copy(sourceFile, destinationFile, true); //fails the second time with exception 

catch (Exception)
                   
    throw;

即使尝试将图像临时设置为空路径也不能解决问题。

我得到的异常: PresentationFramework.dll 中出现“System.IO.IOException”类型的未处理异常

【问题讨论】:

检查***.com/questions/1688545/… 【参考方案1】:

我有一种情况,我需要用户选择要显示的图像,然后移动图像的位置。我很快发现,当我被绑定到图像时,我持有文件锁,阻止我移动它。在 BitmapImage 上有一个 CacheOption 允许您缓存 OnLoad。不幸的是,我无法在 Image 的绑定上设置它,所以为了绕过它,我不得不在 Source 上使用转换器:

public class ImageCacheConverter : IValueConverter

    public object Convert(object value, Type targetType,
        object parameter, System.Globalization.CultureInfo culture)
    

        var path = (string)value;
        // load the image, specify CacheOption so the file is not locked
        var image = new BitmapImage();
        image.BeginInit();
        image.CacheOption = BitmapCacheOption.OnLoad;
        image.UriSource = new Uri(path);
        image.EndInit();

        return image;

    

    public object ConvertBack(object value, Type targetType,
        object parameter, System.Globalization.CultureInfo culture)
    
        throw new NotImplementedException("Not implemented.");
    
 

XAML:

<Image Source="Binding Path=SmallThumbnailImageLocation, Converter=StaticResource imagePathConverter"/>

【讨论】:

以上是关于WPF数据绑定到图像文件永远锁定该文件[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何更新图像文件绑定到图像控件?

将 wpf 图像控件保存到文件的最简单方法

WPF绑定到Listview的Itemtemplate的可见性不起作用[重复]

如何将 WPF 图像资源文件夹写入磁盘?

将 wpf xaml 图像绑定到 System.Windows.Controls.Image 不起作用

在 WPF 中动态地将元素定位到网格中