Я думаю, что то, что происходит, - это состояние гонки. Некоторые из ваших изображений не были загружены к тому времени, когда вы просили их отобразить. Вот очень хороший пример, приведенный здесь http://social.msdn.microsoft.com/Forums/en/wpf/thread/dc4d6aa9-299f-4ee8-8cd4-27a21ccfc4d0, который я подытожу:
private ImageSource _Src;
public ImageSource Src
{
get { return _Src; }
set
{
_Src = value;
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs("Src"));
((BitmapImage)_Src).DownloadCompleted += new EventHandler(MainWindow_DownloadCompleted);
}
}
void MainWindow_DownloadCompleted(object sender, EventArgs e)
{
PropertyChanged(this, new PropertyChangedEventArgs("Src"));
((BitmapImage)_Src).DownloadCompleted -= MainWindow_DownloadCompleted;
}
С помощью приведенного выше кода вашим изображениям, связанным с вашей собственностью, будет предложено обновить их с помощью вызова PropertyChanged при первом назначении значения, а также ПОСЛЕ того, как изображения загружены на 100%. Об этом позаботится обработчик события DownloadCompleted, который используется в приведенном выше примере. Это должно сделать их больше не черным изображением, а полностью готовыми.
Кроме того, если вы используете поток для источника изображений, вам необходимо убедиться, что вы используете BitmapCacheOption.OnLoad. Такие как:
BitmapImage source = new BitmapImage();
source.BeginInit();
source.CacheOption = BitmapCacheOption.OnLoad;
source.StreamSource = yourStream;
source.EndInit();
Это потому, что по умолчанию изображение, использующее источник, будет загружать его лениво, и к тому времени ваш поток, вероятно, будет закрыт, что также может быть причиной того, что вы получаете чистые / черные изображения.
Удачи.