何が起こっているのかは競合状態だと思います。一部の画像は、表示を要求している時点でダウンロードが完了していません。ここに与えられたかなり良い例があります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;
}
上記のコードでは、プロパティにバインドされている画像は、値が最初に割り当てられたときと、画像が 100% ダウンロードされた後に、PropertyChanged 呼び出しで更新するように指示されます。これは、上記の例で使用されている DownloadCompleted イベント ハンドラーで処理されます。これにより、彼らはもはや黒いイメージとしてではなく、完全に準備が整った自分として現れるはずです.
また、画像のソースとしてストリームを使用している場合は、必ず BitmapCacheOption.OnLoad を使用する必要があります。そのような:
BitmapImage source = new BitmapImage();
source.BeginInit();
source.CacheOption = BitmapCacheOption.OnLoad;
source.StreamSource = yourStream;
source.EndInit();
これは、デフォルトでは、ソースを使用する画像が遅延ロードされ、それまでにストリームが閉じられている可能性があるためです。これが、空白/黒い画像が表示される理由でもあります.
幸運を。