2012-02-23 12 views
22

मेरे पास कई छवियां हैं जिन्हें मैं exe में एम्बेड करना चाहता हूं।एक्सएएमएल से एम्बेडेड संसाधनों का संदर्भ कैसे लें?

जब मैं एंबेडेड संसाधन मैं के माध्यम से कोड बाहर एक त्रुटि है कि संसाधन उपलब्ध नहीं है मिलता है और मुझे

मैं संसाधन को कार्रवाई बिल्ड स्थापित करने के लिए पूछ करने के लिए बिल्ड कार्रवाई सेट कई अलग-अलग तरीकों का प्रयास किया:

<ImageSource x:Key="Image_Background">YearBook;component/Resources/Images/darkaurora.png</ImageSource> 

<ImageSource x:Key="Image_Background">Images/darkaurora.png</ImageSource> 

<ImageSource x:Key="Image_Background">pack://application:,,,/Resources/Images/darkaurora.png</ImageSource> 

यह कोड संसाधन फ़ाइल में बैठता है। लेकिन कोई भी काम, वे सभी इस त्रुटि फेंक:

Cannot convert the string 'pack://application:,,,/Resources/Images/darkaurora.png' into a 'System.Windows.Media.ImageSource' object. Cannot locate resource 'resources/images/darkaurora.png'. Error at object 'Image_Background' in markup file 'YearBook;component/Resources/ImageResources.xaml' Line 4 Position 6. 

और में कोड में विभिन्न स्थानों मैं मिलता है:

the file 'YearBook;component/Resources/Images/shadowdrop.png' is not a part of the project or its 'Build Action' property is not set to 'Resource' 

तो, मैं गलत क्या कर रहा हूँ?

उत्तर

17

आप सेट करते हैं BuildActionसंसाधन करने के लिए इसे एक विधानसभा में एम्बेडेड संसाधन के रूप में चला जाता है। या आप बिल्डएक्शन से सामग्री पर सेट कर सकते हैं तो यह परिणामस्वरूप .xap फ़ाइल में बंडल हो जाएगा। आप इन बिल्डएक्शन में से किसी एक का उपयोग कर सकते हैं। बिल्डएक्शन से सामग्री पर आप छवि का उपयोग कर सकते हैं जैसे: "/Resources/Images/darkaurora.png" (स्लैश के साथ शुरू होना चाहिए)। और जब आप बिल्डएक्शन संसाधन का उपयोग करते हैं तो आप छवि को "YearBook;component/Resources/Images/darkaurora.png" (असेंबलीनाम; घटक/सापेक्षपाथ) के रूप में एक्सेस कर सकते हैं। उम्मीद है कि यह मदद करेगा।

+13

"एम्बेडेड संसाधन" और "संसाधन" अलग हैं। यदि आप परावर्तक या ILSpy में जेनरेट की गई असेंबली को देखते हैं तो आप देखेंगे कि वे विभिन्न तरीकों से शामिल हो जाते हैं। लेखक ने पूछा कि "एम्बेडेड संसाधन" के साथ इसे कैसे करें, न कि "संसाधन"। – BrainSlugs83

+0

@ethicallogics लेकिन अगर दृश्यमान के माध्यम से इस संसाधन को बांधने की आवश्यकता है तो क्या होगा? स्ट्रिंग पथ से बांधने के अलावा, कोई अन्य विकल्प है? –

+0

यह दुखद रूप से BuildAction = संसाधन – Nick

2

संसाधन के निर्माण सेट कार्रवाई, संसाधन

+0

लेकिन मैं इसे एम्बेडेड संसाधन होना चाहता हूं। मुझे छवियों के बिना एप्लिकेशन को तैनात करने की आवश्यकता है। –

+3

इसे किसी संसाधन में सेट करने से इसे असेंबली – devdigital

+0

लॉल में एम्बेड किया जाएगा, यह मेरा नहीं है ... –

0

ImageSource instantiated नहीं किया जा सकता है एंबेडेड नहीं।

public abstract class ImageSource : Animatable, 
IFormattable 

कि थोड़ा abstract वहाँ में जो अपने दिन पेंच होगा नहीं है। आपका एक्सएएमएल वास्तव में इमेजसोर्स के एक इंस्टेंस को चालू करने की कोशिश कर रहा है, फिर स्ट्रिंग को कन्वर्ट करने के लिए जो भी कनवर्टर इस्तेमाल कर सकता है, उसका उपयोग करके सामग्रीप्रॉपर्टीएट्रिब्यूट (??) के साथ चिह्नित संपत्ति में तत्व (आपके यूरी, इस मामले में) के भीतर मान असाइन करें। एक वस्तु (फिर से, ??)।

मुझे लगता है कि आप BitmapSource चाहते हैं।

<BitmapImage 
    x:Key="Image_Background" 
    UriSource="/Images/darkaurora.png" /> 
+0

फिर जब मैं इसे संसाधन में सेट करता हूं तो यह क्यों काम करता है? –

+0

@ eric.itzhak: [उह, वास्तव में?] (Http://i.stack.imgur.com/RrKXy.png) – Will

+4

वास्तव में आपको यह गलत लगता है, आप एक्सएएमएल में 'छवि स्रोत' घोषित कर सकते हैं क्योंकि कक्षा इसमें एक [प्रकार कनवर्टर] है (http://msdn.microsoft.com/en-us/library/cc645047.aspx) इसके साथ जुड़ा हुआ है ([docs] में विशेषताएँ देखें (http://msdn.microsoft.com/ en-us/पुस्तकालय/system.windows.media.imagesource.aspx))। आपको यह नहीं बता सकता कि यह कहां दस्तावेज है लेकिन मुझे लगता है कि आप मुझ पर भरोसा कर सकते हैं। आपको वह त्रुटि मिलती है क्योंकि टैग का आंतरिक-एक्सएमएल गुम है। –

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