2014-04-09 5 views
7

मेरे पास मेरे संसाधनों में दो .png फ़ाइलें शामिल हैं जिन्हें बाध्यकारी करते समय मुझे अपने उरी तक पहुंचने की आवश्यकता है।संसाधनों में संग्रहीत छवि का उरी कैसे प्राप्त करें

<Grid> 
    <Image> 
    <Image.Source> 
     <BitmapImage DecodePixelWidth="10" UriSource="{Binding Path=ImagePath}"/> 
    </Image.Source> 
    </Image> 
</Grid> 

और binding कोड ImagePath उपयोग कर रहा है:

ImagePath = resultInBinary.StartsWith("1") ? Properties.Resources.LedGreen : Properties.Resources.ledRed; 

हालांकि

Properties.Resources.LedGreen 

मेरे xaml कोड का पालन के रूप में हैString के बजाय Bitmap लौटाता है जिसमें उस विशेष छवि के उरी शामिल हैं। मैं सिर्फ यह जानना चाहता हूं कि उस मूल्य को निकालने के लिए उस मूल्य को निकालने के लिए बिना किसी निर्देशिका के छवि को कैसे निकालना है। (जो ईमानदारी से मुझे यकीन नहीं है कि ऐसा करने के लिए सही काम है क्योंकि मुझे नेट पर कोई समान स्थिति नहीं मिल रही थी)।

कृपया मुझे बताएं कि अगर कोई उपलब्ध तरीका है तो मैं इसे उपयोग करने का प्रयास कर रहा हूं।

उत्तर

18

एक WPF एप्लिकेशन में आप आमतौर पर Properties/Resources.resx में छवियों को संग्रहीत नहीं करेंगे और Properties.Resources कक्षा के माध्यम से उन्हें एक्सेस नहीं करेंगे।

इसके बजाय आप छवि फ़ाइलों को नियमित रूप से "छवियों" या इसी तरह के फ़ोल्डर में अपने विजुअल स्टूडियो प्रोजेक्ट में नियमित फ़ाइलों के रूप में जोड़ते हैं। फिर आप अपने Build Action को Resource पर सेट करेंगे, जो प्रॉपर्टी विंडो में किया जाता है। आप वहां मिलते हैं उदा। छवि फ़ाइल पर राइट-क्लिक करके और Properties मेनू आइटम का चयन करें। ध्यान दें कि Build Action का डिफ़ॉल्ट मान छवि फ़ाइलों के लिए Resource होना चाहिए।

कोड से इन छवि संसाधनों तक पहुंचने के लिए आप Pack URI का उपयोग करेंगे। ऊपर फ़ोल्डर का नाम "छवियाँ" और "LedGreen.png" नाम एक छवि फ़ाइल, बनाने के साथ इस तरह के एक यूआरआइ इस प्रकार दिखाई देगा:

var uri = new Uri("pack://application:,,,/Images/LedGreen.png"); 

तो तुम शायद अपनी संपत्ति की घोषणा कर सकता है प्रकार उरी का होना:

public Uri ImageUri { get; set; } // omitted INotifyPropertyChanged implementation 

और इस तरह यह सेट:

ImageUri = resultInBinary.StartsWith("1") 
     ? new Uri("pack://application:,,,/Images/LedGreen.png") 
     : new Uri("pack://application:,,,/Images/LedRed.png"); 

अंत में अपने XAML जो पर निर्भर करता है कि नीचे दिखाया गया, की तरह दिखना चाहिए निर्मित जैसे रूपांतरण उरी से ImageSource करने के लिए:

<Grid> 
    <Image Width="10" Source="{Binding Path=ImageUri}" /> 
</Grid> 
+0

वर्णनात्मक उत्तर के लिए धन्यवाद और अधिक महत्वपूर्ण रूप से ऐसा करने के सही तरीके के बारे में एक सुझाव।मैंने आपके समाधान को जिस तरह से सुझाया है, उसमें मैंने अपना समाधान लागू किया है, हालांकि मुझे आश्चर्य है कि मुझे इन छवियों को निष्पादन योग्य के साथ रखने और रखने की आवश्यकता है जिसे मैं दूसरी टीम में सौंपने वाला हूं? चूंकि यह एक काफी सरल परियोजना है, इसलिए मैं इसके लिए इंस्टॉलर बनाने की योजना नहीं बना रहा हूं। – Mehrad

+1

नहीं, 'संसाधन' बिल्ड एक्शन असेंबली में छवि फ़ाइलों को जोड़ता है। तो वे निष्पादन योग्य में निहित हैं। – Clemens

1

Properties.Resources.LedGreen संपत्ति ImageSource के रूप में घोषित करें और इसे बिटमैप ऑब्जेक्ट की बजाय उरी स्थान पर सेट करें।

या यदि आप बिटमैप के रूप में इसे संग्रहीत करने का आग्रह करते हैं तो आप Properties.Resources.LedGreen.ImageSource लौटकर स्रोत प्राप्त कर सकते हैं जो ImageSource प्रकार का होगा।

मैं पहला दृष्टिकोण पसंद करूंगा।

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