2011-07-26 20 views
4

私は、ユーザーのハードドライブ上の特定のパスの下に各フォルダのボタンを持つwpfアプリケーションを持っています。各フォルダには、ボタンに表示されるイメージと、ボタンがクリックされたときに実行されるファイルが含まれています。ここで私はボタンのために使用していますテンプレートは次のとおりです。ボタンで使用中の画像を削除できません

<DataTemplate x:Key="ProgramItemDataTemplate"> 
     <Button Style="{StaticResource ButtonStyle}" Click="Program_Click" Tag="{Binding Key}"> 
      <Button.ContextMenu> 
       <ContextMenu>       
        <MenuItem x:Name="DeleteMenuItem" Click="DeleteMenuItem_Click" Header="Delete" Tag="{Binding Key}" /> 
       </ContextMenu> 
      </Button.ContextMenu> 
      <StackPanel> 
       <Image Source="{Binding Value}" MaxWidth="200" MaxHeight="175"></Image> 
       <TextBlock Text="{Binding Key,Converter={StaticResource PathToNameConverter2}}" TextWrapping="Wrap" TextAlignment="Center" /> 
      </StackPanel> 
     </Button> 
    </DataTemplate> 

結合値は、画像へのパスで、バインドキーは、ボタンがクリックされたときに実行され、別のファイルへのパスです。問題は、DeleteMenuItem関数です。画像が入っているフォルダを削除したいのですが、画像ファイルがボタンによって使用されているので、私にはできません。どのように私は安全にフォルダを削除することができるように私のアプリケーションでの使用から画像を解放することができますか?デフォルトのBitmapImageのBitmapCacheOptionことで

+0

は、あなたがどこでもapplication.Whenにオブジェクトがここであなたは、GCのリリース前にフォルダを削除しようとしている問題でit.May任意の変数GCのリリースによって参照されていない画像を参照しないことを確認してください画像。 – maniacneron

答えて

4

は、あなた自身のValueConverterを持っていることによってOnLoadにこれを変更することができますし、それはあなたの問題を解決する必要がありOnDemandです。

public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     BitmapImage image = new BitmapImage(); 
     image.BeginInit(); 
     image.CacheOption = BitmapCacheOption.OnLoad; 
     image.UriSource = new Uri(value.ToString()); 
     image.EndInit(); 
     return image; 
    } 

<Image Source="{Binding Path, Converter={StaticResource ImageConverter}}"/> 
+0

チャームのように働いた!ありがとう、トン。私は間違いなくこれを考えなかっただろう、少なくとも今月はない! PS ..私はあなたのプロフィール写真が大好きです。 – AdmSteck

関連する問題