2011-02-04 18 views
2

私はリストボックスコントロールで独自のデータテンプレートを使用します。リストボックスアイテムは、1つのイメージコントロールといくつかのテキストブロックで構成されます。画像ソースに空白 - 画像ソースが絶対的な場合のWPFの黒画像コントロールUri

Iがウリのプロパティタイプ(絶対URL - 例えば:http://u.aimg.sk/fotky/1730/71/17307141.jpg?v=2)に結合 - 300アイテム

リストボックスは、約50を有します。

私がアプリをテストすると、ユーザーの画像ではなく空白の画像または黒い画像が表示されることがあります。

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

enter image description here enter image description here

私はこの問題を引き起こすものを知りたいのですが、どのように私はこの問題を解決することができます。 画像ソースが良好です。ブラウザで確認しています。

ありがとうございました。

+0

注:イメージをローカルにダウンロードすることでこの問題を解決しようとしましたが(これは意味があったため、限られた数の製品しか持っていませんでしたが)、まだ問題があります。だから、それは間違いなく競合状態ですが、ネットワーク活動に限らず、ローカルファイルURIからロードすることさえも問題は残っています –

答えて

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; 
} 

は、あなたの財産に結合されているあなたのイメージはのPropertyChangedコールで更新するように指示されます画像が100%ダウンロードされた後に割り当てられます。これは、上の例で使用されているDownloadCompletedイベントハンドラで処理されます。これにより、彼らはもう黒いイメージとして表示されなくなりますが、完全に準備された自己として表示されます。

また、画像のソースとしてストリームを使用している場合は、BitmapCacheOption.OnLoadを必ず使用する必要があります。以下のような:

BitmapImage source = new BitmapImage(); 
source.BeginInit(); 
source.CacheOption = BitmapCacheOption.OnLoad; 
source.StreamSource = yourStream; 
source.EndInit(); 

これは、ソースを使用して画像ので、デフォルトではあります遅延ロードも、その後で、あなたのストリームは、おそらくあなたは、ブランク/黒画像を取得する理由もすることができた、閉じられています。

幸運。

関連する問題