2011-08-09 15 views
5

मेरे पास एक सूची बॉक्स है जिसमें प्रत्येक तत्व की एक छवि होती है जो पहले से ही सामग्री के रूप में संग्रहीत होती है। मैं कनवर्टर का उपयोग करके प्रदर्शित होने वाली छवि का चयन करता हूं।छवि सूची में समस्या लोड हो रही है, WP7

यदि संबंधित मान के लिए छवि मौजूद नहीं है, तो मुझे एक डिफ़ॉल्ट छवि प्रदर्शित करना होगा जिसे मैंने ImageFailed ईवेंट में संभाला है।

समस्या यह है कि जब मैं प्रोग्राम चलाता हूं तो मुझे कुछ छवियों के लिए डिफ़ॉल्ट छवि मिल रही है जो पहले से मौजूद हैं। यदि मैं सूची बॉक्स को नीचे स्क्रॉल करता हूं और फिर बैक अप करता हूं तो कभी-कभी एक छवि जो प्रदर्शित होती है वह डिफ़ॉल्ट छवि प्रदर्शित करती है। यह एक प्रदर्शन मुद्दा प्रतीत होता है।

मैं एप्लिकेशन विकास के लिए नया हूं, मुझे किसी भी विवरण के बारे में बताएं, भले ही यह आपके लिए तुच्छ लग सकता है।

नीचे मेरी कार्यान्वयन

<ListBox DataContext="{Binding}"> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
       <StackPanel> 
          <Image Width="90" Height="67" Source="{Binding id,Converter={StaticResource imageConverter}}" ImageFailed="ImageFailed" /> 
          _ 
          _ 
        </StackPanel> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

परिवर्तित समारोह है

public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
{ 
     string Id = (string)value; 
    string imagePath; 
    imagePath = string.Format(AppDefines.channelLogoImgPath, prgSvcId); 
    return imagePath; 
} 

ImageFailed हैंडलर

private void ImageFailed(object sender, ExceptionRoutedEventArgs e) 
{ 
    Image Img = (Image)sender; 
    string imgPath = Defines.defImagePath 
    Uri uri = new Uri(imgPath, UriKind.RelativeOrAbsolute); 
    BitmapImage bDefImage = new BitmapImage(uri); 
    Img.Source = bDefImage; 
} 
+0

+1 आपके प्रश्न को स्पष्ट रूप से बताते हुए और उदाहरण के लिए Xaml & Code! :) –

उत्तर

0

क्योंकि आपके Convert विधि में पारित मान का उपयोग नहीं कर रहा है यह है, लेकिन prgSvcId देख रहा है?

यदि आप एक्सएपी के भीतर से छवियां लोड कर रहे हैं तो आप डिफ़ॉल्ट/वैकल्पिक छवि को लोड करने में विफलता पर भरोसा करने के बजाय अपने अस्तित्व के लिए परीक्षण कर सकते हैं।

एक फ़ाइलों अस्तित्व के लिए परीक्षण करने के लिए:

if (Application.GetResourceStream(new Uri("/images/myPic.png", UriKind.Relative)) != null) 
{ 
    // file exists 
} 
+0

वह एक टाइपो था, मैंने इसे अधिक सामान्य दिखने के लिए अपना कोड संशोधित किया :)। मेरे पास सामग्री के रूप में जोड़े गए सभी फाइलें हैं, क्या यह जांचने का कोई तरीका है कि फ़ाइल बिल्ड एक्शन-सामग्री के लिए प्रोग्रामेटिक रूप से मौजूद है या नहीं? –

1

समस्या यह है कि आपके कनवर्टर (छवि के लिए पथ) एक स्ट्रिंग लौटा रहा है, न कि किसी ImageSource है।

public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
{ 
    string imagePath = string.Format(AppDefines.channelLogoImgPath, value); 
    return new BitmapImage(imagePath); 
} 

के रूप में मैट का उल्लेख किया, आप भी आईडी आप कनवर्टर करने के लिए गुजर रहे हैं उपयोग नहीं कर रहे:

आप इस के बजाय की तरह कुछ की जरूरत है। उपरोक्त सरलीकृत कोड में फिक्स शामिल है।

1

मुझे समस्या के समाधान के आसपास एक काम मिला है, मैंने उसी स्थान पर 2 छवियां रखी हैं। डिफ़ॉल्ट छवि प्रारंभ से ही दिखाई दे रही है। आइटम विशिष्ट छवि का स्रोत ऊपर (बाध्यकारी) के रूप में प्राप्त किया जाता है। छवि में आइटम विशिष्ट छवि के ईवेंट हैंडलर को खोला गया है, डिफ़ॉल्ट छवि की दृश्यता को ध्वस्त करने के लिए सेट किया गया है।

ऐसा करने के बाद, ऐप दोनों एमुलेटर और डिवाइस पर ठीक काम कर रहा है। अभी के लिए केवल 2 चीजें हैं जिन्हें मैं दोषी ठहरा सकता हूं।

छवि असफल घटना। कुछ ऐसे मामले हैं जहां छवि विफल घटना ट्रिगर होती है और छवि भी प्रदर्शित होती है। (शायद कुछ समय सीमा आदि है जिसने घटना को निकाल दिया)

सूची बॉक्स और छवियां एक साथ नहीं जातीं।

0

मुझे एक ही समस्या दिखाई दे रही है, मैं एक यूआरएल बाध्यकारी हूं, फिर पृष्ठभूमि में छवि प्राप्त करने और इसे वापस लोड करने के लिए एक सेवा और थ्रेड पूल का उपयोग कर रहा हूं। मैंने सूची में कस्टम नियंत्रण बनाया है, लेकिन निर्भरता लगता है कि नियंत्रण में संपत्ति पूरी सूची में यादृच्छिक यूआरएल लौट रही है। सबसे पहले मैंने सोचा कि यह किसी प्रकार का सिंक्रनाइज़ेशन मुद्दा था, लेकिन मुझे लगता है कि ऐसा इसलिए है क्योंकि ListBox सामान्य SL सूची बॉक्स की तरह नहीं है क्योंकि यह वर्चुअलाइजिंगस्टैक पैनेल का उपयोग करता है। वहाँ कुछ दिशा निर्देश यहां हैं:

http://blogs.msdn.com/b/slmperf/archive/2010/10/06/silverlight-for-windows-phone-7-listbox-scroll-performance.aspx

मूल रूप से कोशिश करते हैं और कुछ भी सूची में असामान्य मत करो!

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