我在WPF C#中有一个代码,我用它来加载来自网络的图像:
if (myImgURL != "")
{
var imgBitmap = new BitmapImage();
imgBitmap.BeginInit();
imgBitmap.UriSource = new Uri(myImgURL, UriKind.RelativeOrAbsolute);
imgBitmap.CacheOption = BitmapCacheOption.OnLoad;
imgBitmap.EndInit();
myImgControl.Source = imgBitmap;
}
它完美无缺,但有时需要一段时间才能显示图像(如果互联网速度很慢)。我如何获得ProgressRing(来自Mahapps.Metro工具包)显示并在图像加载时启用,然后在显示图像时消失?
我不知道在下载图像和完全加载图像时是否有任何事件触发器。
答案 0 :(得分:0)
看一下BitmapSource类(BitmapImage的基类)中的以下事件:
只是一张纸条。您正在从Uri创建一个BitmapImage并立即显示它。因此,不需要设置BitmapCacheOption.OnLoad
(仅当您从应在EndInit
之后立即关闭的流加载时才需要afaik)。所以你可以这样缩短你的代码:
if (!string.IsNullOrEmpty(myImgURL))
{
var imgBitmap = new BitmapImage(new Uri(myImgURL));
myImgControl.Source = imgBitmap;
if (imgBitmap.IsDownloading)
{
// start download animation here
imgBitmap.DownloadCompleted += (o, e) =>
{
// stop download animation here
};
imgBitmap.DownloadFailed += (o, e) =>
{
// stop download animation here
};
}