C# 如何在不更改WPF中的源属性的情况下重新加载图像?
假设我有一个C# 如何在不更改WPF中的源属性的情况下重新加载图像?,c#,wpf,image,C#,Wpf,Image,假设我有一个图像对象,其源属性按以下方式初始化: BitmapImage source = new BitmapImage(); source.BeginInit(); source.CacheOption = BitmapCacheOption.OnLoad; source.CreateOptions = BitmapCreateOptions.IgnoreImageCache; source.UriSource = new Uri("C:\\Temp\\tech\\window.jpg");
图像
对象,其源
属性按以下方式初始化:
BitmapImage source = new BitmapImage();
source.BeginInit();
source.CacheOption = BitmapCacheOption.OnLoad;
source.CreateOptions = BitmapCreateOptions.IgnoreImageCache;
source.UriSource = new Uri("C:\\Temp\\tech\\window.jpg");
source.EndInit();
image.Source = source; // image object automatically initialized in the window construction.
正如您可以隐式看到的,window.jpg
是一个永久更改的图像(被删除并替换为具有相同名称的新的不同图像)
我一直在使用上述方法初始化图像
对象源
属性,因为我在找到它作为支持图像
刷新的方法
但是,在程序运行时删除和替换window.jpg
时,图像
对象仍然显示初始化其源
属性(缓存)时加载的图像
似乎图像
对象忽略了BitmapCreateOptions.IgnoreImageCache
值,并且在新图像替换先前删除的图像时不会刷新图像
任何解决方案都将受到欢迎
编辑
我不想更改文件名,因为我需要冗余地查找不存在的随机名称,而不是仅仅刷新图像以再次加载相同的源文件
我不想更改Source
属性值,因为我不更改文件名
理想的解决方案是每次图像文件更改时更新图像
对象。图像更改由我控制,因此无需绑定并等待更改,相反,如果可能,我将强制图像刷新。我将在XAML中有一个图像
,在XAML中,我将image.Source
绑定到viewmodel上类型为ImageSource
的属性。当磁盘上的.jpg发生更改时,我会让一个FileSystemWatcher
更新ImageSource
属性,并在发生更改时引发PropertyChanged
在XAML中,通过使用Binding
类将viewmodel属性绑定到控件的依赖项属性,可以更新UI控件内容/属性。绑定更新控件以响应viewmodel中引发的INotifyPropertyChanged.PropertyChanged
和INotifyCollectionChanged.CollectionChanged
事件 我当前的解决方案是,每当我删除并创建一个新的窗口.jpg
,我就用问题中提到的Image.Source
属性初始化设置我的Image.Source
属性。有什么解决方案吗?我看到的唯一问题是您要求重新加载图像
,而不更改源
属性的值。我认为这是不可能的,除非您使用可写位图对象(例如,writeablebitmap
,RenderTargetBitmap
,等等)。但是更改源
属性有什么错呢?您是否发现当您更改Source
属性时,您的图像仍然没有得到更新?请提供一个能够可靠地再现您的问题的好代码,以及该代码的作用和您希望它做什么的精确描述。@PeterDuniho,感谢您的重播。请检查我的编辑。非常感谢你的回答,它似乎工作得很好。不幸的是,当我阅读的时候,我宁愿不用它。谢谢,我没有意识到它坏了。