Одна из приятных особенностей элемента управления Image заключается в том, что мы можем указать Uri в качестве ImageSource, и изображение будет автоматически загружено для нас. Отлично! Однако у элемента управления, похоже, нет свойства, указывающего, выполняется ли загрузка изображения или нет.
Есть ли свойство, сообщающее нам статус (загрузка, скачивание и т. д.) Элемента управления изображением?
Спасибо!





Хм - это хороший вопрос. Я просмотрел документацию класса ImageSource в MSDN, и не похоже, что там есть что-то, что могло бы получить эту информацию.
При этом не могли бы вы начать загрузку вручную и установить свойство Source элемента управления Image после завершения загрузки? Вы бы точно знали, завершилась ли загрузка ...
Установить OnPropertyChanged на DP изображения?
Пока ваш ImageSource является BitmapImage, вы можете использовать событие BitmapImage.DownloadCompleted. Единственная проблема, которую я обнаружил до сих пор, заключается в том, что он работает только с C#, поэтому вы потеряете некоторую гибкость. Я предполагаю, что вы можете получить доступ к этому событию из XAML, но я не уверен, как это сделать. В следующем примере загрузка изображения начинается с нажатия кнопки и обновляется метка, когда изображение завершает загрузку.
XAML:
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height = "50" />
<RowDefinition Height = "50" />
<RowDefinition Height = "*" />
</Grid.RowDefinitions>
<Image x:Name = "image" Grid.Row = "2"/>
<Label x:Name = "label" Content = "aaa" Grid.Row = "1" />
<Button Click = "Button_Click" Content = "Click to load image" Grid.Row = "0" />
</Grid>
Код:
private void Button_Click(object sender, RoutedEventArgs e)
{
BitmapImage bi = new BitmapImage();
bi.BeginInit();
bi.DecodePixelHeight = 100;
bi.CacheOption = BitmapCacheOption.OnLoad;
bi.UriSource = new Uri("bigImageUri");
bi.EndInit();
bi.DownloadCompleted += new EventHandler(bi_DownloadCompleted);
image.Source = bi;
}
void bi_DownloadCompleted(object sender, EventArgs e)
{
label.Content = "dl completed";
}
Надеюсь, это поможет!
VB: AddHandler bi.DownloadCompleted, bi_DownloadCompleted
У меня нет контроля над загрузкой ... Я просто установил Uri и готово. Конечно, я мог бы попытаться изобрести велосипед и загрузить себе картинки, отобразить их и т. Д ... но я не думаю, что хочу это делать ...