2009-11-19 10 views
10

私は、画像の数を表示し、ファイルシステムの周りを移動できるようにするWPFの画像管理アプリケーションで作業しています。私が遭遇した問題は、<Image>要素を含むファイルを表示するとファイルが開いているように見えるため、ファイルの移動や削除の試行が失敗します。手動でWPFにファイルをアンロードまたはリリースして移動できるように手動で要求する方法はありますか?または、ファイルを開いていない画像を表示する方法がありますか?以下ビューアXAML:ファイルを開いたままでWPFで画像を表示

<ListBox x:Name="uxImages" ScrollViewer.HorizontalScrollBarVisibility="Disabled"> 
      <ListBox.ItemsPanel> 
       <ItemsPanelTemplate> 
        <WrapPanel Orientation="Horizontal" /> 
       </ItemsPanelTemplate> 
      </ListBox.ItemsPanel> 

      <ListBox.ItemTemplate> 
       <DataTemplate> 
        <Border Margin="4"> 
         <Image Source="{Binding}" Width="150" Height="150"/> 
        </Border> 
       </DataTemplate> 
      </ListBox.ItemTemplate> 
     </ListBox> 

答えて

15

あなたListBoxItemsSourceは何?イメージパスを含む文字列のリスト?

public class PathToImageConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     string path = value as string; 
     if (path != null) 
     { 
      BitmapImage image = new BitmapImage(); 
      using (FileStream stream = File.OpenRead(path)) 
      { 
       image.BeginInit(); 
       image.StreamSource = stream; 
       image.CacheOption = BitmapCacheOption.OnLoad; 
       image.EndInit(); // load the image from the stream 
      } // close the stream 
      return image; 
     } 
    } 
} 
+1

追加このことを、それが働いた:あなたがイメージをロードした後、代わりに暗黙的にImageSourceはに文字列から組み込みのコンバータを使用しての

は、ストリームを閉じるために、カスタムコンバータを使用しています。ありがとう! image.CacheOption = BitmapCacheOption.OnLoad; –

+0

image.CacheOption = BitmapCacheOption.OnLoadのように見えます。 image.BeginInit()の後に呼び出す必要があります。 。私が初期化呼び出しの後、BeginInit()の前にそれを割り当てたとき、画像は表示されませんでした。 – SKG

+0

警告:このソリューションは非常に遅いです。現在、それをスピードアップする方法を見つけようとしていますが、たくさんの画像を読み込むのは良くありません。 – rookie1024

関連する問題