我正在尝试构建一个自定义控件,基于Image
,它简单地使图像在定时器上重新加载(从相同的URI)。原始图像显示正常,但似乎没有刷新。
以下是自定义控件代码:
public class RefreshImage : Image
{
protected override void OnInitialized(EventArgs e)
{
base.OnInitialized(e);
this.Loaded += RefreshImage_Loaded;
}
private void RefreshImage_Loaded(object sender, RoutedEventArgs e)
{
var timer = new DispatcherTimer();
timer.Interval = TimeSpan.FromSeconds(1);
timer.Tick += RefreshImage_Tick;
timer.Start();
}
private void RefreshImage_Tick(object sender, System.EventArgs e)
{
var bm = (BitmapImage) Source;
bm.InvalidateProperty(BitmapImage.UriSourceProperty);
}
}
我正在这样使用它:
<custom:RefreshImage>
<Image.Source>
<BitmapImage UriCachePolicy="NoCacheNoStore"
CreateOptions="IgnoreImageCache" CacheOption="None"
UriSource="{Binding Uri}"/>
</Image.Source>
</custom:RefreshImage>
InvalidateProperty 的文档似乎表明这正是我所需要的:``` 您还可以使用 InvalidateProperty 强制重新评估绑定与无法实现推荐的 INotifyPropertyChanged 通知机制的数据源之间的关系。 ```
在 `Uri` 上引发 `INotifiyPropertyChanged.PropertyChanged` 事件也不会触发图像重新加载。