2

リストボックスコントロールで独自のデータテンプレートを使用します。リストボックスアイテムは、1つの画像コントロールといくつかのテキストブロックで構成されます。

画像ソースで、Uriのプロパティタイプをバインドします(絶対URL-例: http: //u.aimg.sk/fotky/1730/71/17307141.jpg ?v = 2 )

リストボックスには約50〜300個のアイテムがあります。

アプリをテストすると、ユーザー画像の代わりに白または黒の画像が表示されることがあります。

あなたがこの画像で見ることができる問題:

ここに画像の説明を入力してください ここに画像の説明を入力してください

この問題の原因と、この問題を解決するにはどうすればよいか知りたいのですが。画像ソースは良いです、私はブラウザでそれをチェックします。

アドバイスありがとうございます。

4

1 に答える 1

3

何が起こっているのかは競合状態だと思います。一部の画像は、表示を要求している時点でダウンロードが完了していません。ここに与えられたかなり良い例があります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();

これは、デフォルトでは、ソースを使用する画像が遅延ロードされ、それまでにストリームが閉じられている可能性があるためです。これが、空白/黒い画像が表示される理由でもあります.

幸運を。

于 2011-11-02T23:46:33.743 に答える