Wpf中的图像控制显示已删除的上一个图像

时间:2015-02-25 11:49:40

标签: c# wpf

我有一个显示预览图像的图像控件。如果用户删除图像(位于文件夹中),则应显示新拍摄的图像。 但图像控件显示已删除的图像,而不是显示新图像。

// 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");
}

删除目录文件中的图像后,图像图像控件应显示新图像,但我的图像控件显示已删除的图像。请给我解决方案。

2 个答案:

答案 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)