我有一个显示预览图像的图像控件。如果用户删除图像(位于文件夹中),则应显示新拍摄的图像。 但图像控件显示已删除的图像,而不是显示新图像。
// clear the image source before deleting the image.
// save image in the directory
public string globalFilePath;
int imageCount = Directory.GetFiles(imgDir, "*", SearchOption.TopDirectoryOnly).Length;
string filePath = Path.Combine(imgDir, "IMAGE_" + ++imageCount + ".jpeg");
globalFilePath = filePath;
// setting image control source
var strUri = new Uri(WebCamControl.globalFilePath, UriKind.Relative);
previewImage.Source = BitmapFromUri(strUri);
//Method
public static ImageSource BitmapFromUri(Uri source)
{
var bitmap = new BitmapImage();
bitmap.BeginInit();
bitmap.UriSource = source;
bitmap.CacheOption = BitmapCacheOption.OnLoad;
bitmap.EndInit();
return bitmap;
}
// delete image
previewImage.Source = null;
if (System.IO.File.Exists(WebCamControl.globalFilePath))
{
System.IO.File.Delete(WebCamControl.globalFilePath);
}
else
{
MessageBox.Show("File Not Exists");
}
删除目录文件中的图像后,图像图像控件应显示新图像,但我的图像控件显示已删除的图像。请给我解决方案。
答案 0 :(得分:2)
在WPF中,我们通常不需要使用实际的BitMapImage
个对象来显示Image
。让.NET Framework将我们的string
文件路径转换为实际的Image
元素要容易得多。
此外,将Image.Source
数据绑定到实现INotifyPropertyChanged
interface(或DepenedencyProperty
)的属性的数据远:
<Image Source="{Binding YourImageFilePath}" ... />
然后,只要新图像的文件路径设置为YourImageFilePath
属性,您显示的图像就会立即更新。
YourImageFilePath = filePath;
答案 1 :(得分:-1)
试试这个:
string path = ((BitmapImage)img.Source).UriSource.LocalPath;
img.SetValue(System.Windows.Controls.Image.SourceProperty, null);
File.Delete(path);
OR
string path = ((BitmapImage)img.Source).UriSource.LocalPath;
img.Source = null;
File.Delete(path)