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绑定到Listview的Itemtemplate的可见性不起作用[重复]