2013-08-31 8 views
10

मैं Image नियंत्रण के स्रोत के लिए बाध्यकारी का उपयोग कर रहा हूं।बाध्यकारी स्रोत शून्य होने पर किसी छवि के लिए डिफ़ॉल्ट स्रोत कैसे सेट करें?

<Image Source="{Binding ImageUri}"/> 

लेकिन इस ImageUri अशक्त हो सकता है, की वजह मैं एक डिफ़ॉल्ट छवि, एक स्थान धारक, उस के लिए है, जो उदाहरण के लिए /Assets/PlaceHolder.png में हो सकता है का उपयोग करना चाहते।

मैं डिफ़ॉल्ट छवि कैसे सेट कर सकता हूं? धन्यवाद। (यह एक WP8 एप्लिकेशन है, लेकिन WPF के विभिन्न नहीं होना चाहिए)

उत्तर

16

आप इसे प्राप्त कर सकते हैं TargetNullValue

<Image> 
    <Image.Source> 
     <Binding Path="ImageUri" > 
      <Binding.TargetNullValue> 
       <ImageSource>/Assets/PlaceHolder.png</ImageSource> 
      </Binding.TargetNullValue> 
     </Binding> 
    </Image.Source> 
</Image> 
+1

मेरे पास एक ऐसा एप्लिकेशन है जहां यह सैकड़ों छवियों को लोड करता है। वास्तविक छवि लोड होने तक डिफ़ॉल्ट छवि को कैसे दिखाया जाए? –

+0

@ अर्जुनकेआर आप http://stackoverflow.com/questions/19113141/is-it-possible-to-show-default-image-before-original-load-from-server –

1

सेट करते समय आप घटना और ChangePropertyAction ImageFailed उपयोग कर सकते हैं।

इस कोड स्निपेट मेरे लिए काम किया:

xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity" 
xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions" 

<Image x:Name="GeologyMapsLegend" Stretch="Fill" Height="150"> 
    <i:Interaction.Triggers> 
     <i:EventTrigger EventName="ImageFailed"> 
      <ei:ChangePropertyAction PropertyName="Source" TargetName="GeologyMapsLegend"> 
       <ei:ChangePropertyAction.Value> 
        <ImageSource> 
         /LanSysWebGIS;component/Pictures/Icon/NoImageAvailable.jpg 
        </ImageSource> 
       </ei:ChangePropertyAction.Value> 
      </ei:ChangePropertyAction> 
     </i:EventTrigger> 
    </i:Interaction.Triggers> 
</Image> 
+0

पर जा सकते हैं, जहां मेरे पास एक एप्लिकेशन है सैकड़ों छवियों को लोड करता है। वास्तविक छवि लोड होने तक डिफ़ॉल्ट छवि को कैसे दिखाया जाए? –

3

आप अपने छवि पर ImageFailed घटना सेट कर सकते हैं

<Image Source="{Binding ImageUri}" ImageFailed="Image_ImageFailed"/> 

और उसके स्थान पर एक विशिष्ट छवि को लोड करने के लिए उपयोग निम्नलिखित सी #।

private void Image_ImageFailed(object sender, ExceptionRoutedEventArgs e) 
{ 
    ((Image)sender).Source = new BitmapImage(new Uri("/Assets/MyDefaultImage.png", UriKind.Relative)); 
} 
2

आप वास्तव में अन्य तरह से जो चारों ओर बस एक Grid लेआउट, स्थानीय प्लेसहोल्डर स्रोत के साथ एक और दूरदराज के Binding साथ एक में दो Image नियंत्रणों का उपयोग करके मेरी राय में एक बेहतर अनुभव है जा सकते हैं। स्थानीय छवि पहले से मौजूद है जब आप अपने रिमोट बाइंडिंग शून्य हैं। हालांकि यदि बाध्यकारी शून्य नहीं है, तो यह स्थानीय प्लेसहोल्डर छवि को स्वचालित रूप से प्रस्तुत करने के बाद कवर करता है।

<Grid> 
    <Image Source="Assets/Placeholder.png"/> 
    <Image Source="{Binding ImageUri}"/> 
</Grid> 
+0

यह सिद्धांत में काम करता है लेकिन मेरी छवियों में पारदर्शी पृष्ठभूमि हैं। इसका मतलब है कि मैं अपनी दूसरी छवि के नीचे की छवि देख सकता हूं। मैं नीचे छवि को कैसे छिपा सकता हूं? – Sweepster

+0

@ स्वीपस्टर बाध्य छवि की छवि ओपनेड घटना का उपयोग करने का प्रयास करें। यदि डेटा बाउंड इवेंट की छवि खोला गया ईवेंट सफलतापूर्वक ट्रिगर हो जाता है तो प्लेसहोल्डर छवि की अस्पष्टता 0 पर सेट करें !! – Shikhar

0

उपयोग TargetNullValue विशेषता। अगर मैं कोई छवि प्रदर्शित नहीं करना चाहता हूं तो यह बहुत उपयोगी है।

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