2009-11-19 8 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

अपने ListBox की ItemsSource क्या है? छवि पथ युक्त तारों की एक सूची?

इसके बजाय परोक्ष ImageSource करने के लिए स्ट्रिंग से निर्मित कनवर्टर का उपयोग करने का

, धारा बंद करने के लिए एक कस्टम कनवर्टर का उपयोग आप छवि को लोड करने के बाद:

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

जोड़ा गया यह और यह काम किया। धन्यवाद! image.CacheOption = बिटमैप कैशऑप्शन.ऑनलोड; –

+0

छवि की तरह दिखता है। कैशऑप्शन = बिटमैप कैशऑप्शन.ऑनलोड; छवि के बाद बुलाया जाना चाहिए। BginginInit(); । जब मैंने इसे प्रारंभिक कॉल के बाद और BeginInit() से पहले असाइन किया था, तो छवि प्रदर्शित नहीं हुई थी। – SKG

+0

चेतावनी: यह समाधान * बहुत धीमा है। वर्तमान में यह समझने की कोशिश कर रहा है कि इसे कैसे गति दें, लेकिन बहुत सारी छवियों को लोड करने के लिए यह अच्छा नहीं है। – rookie1024

संबंधित मुद्दे

 संबंधित मुद्दे