2012-10-12 1 views
2

이미지 파일 형식의 하드 디스크를 여는 내 wpf 페이지에 이미지가 있습니다. 이미지를 정의하는 XAML은 다음과 같습니다 나는 Caliburn 마이크로를 이용하고 있고 ImageFileName 해당 이미지 컨트롤을 표시해야합니다 파일의 이름으로 갱신됩니다wpf에서 열리는 파일을 이미지 컨트롤로 강제로 닫는 방법

<Image Canvas.Left="65" Canvas.Top="5" Width="510" Height="255" Source="{Binding Path=ImageFileName}" /> 

.

이미지가 이미지 컨트롤에 의해 대기 중이면 파일을 변경해야합니다. 그러나 파일은 이미지 컨트롤에 의해 잠겨 있으므로 삭제하거나 복사 할 수 없습니다. 이미지를 열었거나 다른 파일을 복사해야 할 때 이미지를 강제로 닫으려면 어떻게해야합니까?

이미지에 CashOptio가 없으므로 사용할 수 없습니다.

+1

포스트는 ImageFileName 얻을. 그곳에서 파일을 닫고 있습니까? – Paparazzi

+0

@Blam : ImageFileName은 다음과 같습니다. c : \ tmp \ testimage.jpg 저는 직접 열거 나 닫지 않습니다. 이미지 컨트롤을 열지 만 닫지는 않습니다. – user1731110

+0

[이 질문과 대답] (http://stackoverflow.com/q/12799931/1136211)을 참조하십시오. 귀하의 경우 파일 이름을 ImageSource로 변환하는 바인딩 변환기를 작성하는 것이 좋습니다. – Clemens

답변

4

BitmapCacheOption.OnLoad을 설정하여 이미지를 메모리 캐시에 직접로드하는 아래의 binding converter을 사용할 수 있습니다. 파일은 즉시로드되고 나중에 잠글 수 없습니다.

<Image Source="{Binding ..., 
       Converter={StaticResource local:StringToImageConverter}}"/> 

컨버터 :

public class StringToImageConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     object result = null; 
     string uri = value as string; 

     if (uri != null) 
     { 
      BitmapImage image = new BitmapImage(); 
      image.BeginInit(); 
      image.CacheOption = BitmapCacheOption.OnLoad; 
      image.UriSource = new Uri(uri); 
      image.EndInit(); 
      result = image; 
     } 

     return result; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     throw new NotSupportedException(); 
    } 
} 
관련 문제