2012-09-03 28 views
7

करने के लिए स्थानीय फ़ाइल रिश्तेदार उदाहरण के लिए करने के लिए मैं निम्नलिखित परियोजना संरचना है:यूआरआई विधानसभा

Root\Core\Application.exe 
Root\Modules\Assembly.dll 
Root\Modules\Icons\Icon.png 

मेरे Application.exe Assembly.dll लोड करता है। Assembly.dll में एक छवि नियंत्रण के साथ एक WPF UserControl शामिल है। Icon.png एक एम्बेडेड संसाधन नहीं है, यह एक स्थानीय फ़ाइल है (बिल्ड: सामग्री)।

मैं छवि नियंत्रण के स्रोत-संपदा में हर संभव यूआरआई की कोशिश की है, लेकिन यह

<Image Source="Icons\Icon.png" /> 
<Image Source="pack://application:,,,/Icons\Icon.png" /> 
<Image Source="pack://application:,,,/Assembly;component/Icons/Icon.png" /> 

:-(छवि कभी नहीं चलता आदि

कैसे यूआरआई की तरह लग रही है?

उत्तर

5

इस बयान का तात्पर्य है कि आप अपने विधानसभा में सामग्री फ़ाइलें का उल्लेख नहीं कर सकते हैं ... (इसलिए केवल सामग्री फ़ाइलें है कि आपके आवेदन में निर्दिष्ट किया गया "आवेदन: //" का उपयोग कर हल किया जा सकता)।

http://msdn.microsoft.com/en-us/library/aa970069(v=vs.85).aspx

संदर्भित विधानसभाओं में सामग्री फ़ाइलें शामिल नहीं हैं, क्योंकि वे WPF द्वारा असमर्थित हैं। संदर्भित असेंबली में एम्बेडेड फ़ाइलों के लिए पैक यूआरआई अद्वितीय हैं क्योंकि उनमें संदर्भित असेंबली और घटक प्रत्यय दोनों नाम शामिल हैं। मूल फ़ाइलों की साइट के लिए पैक यूआरआई अद्वितीय हैं क्योंकि वे एकमात्र पैक यूआरआई का उपयोग करते हैं जो साइटफोरिगिन: /// प्राधिकरण का उपयोग करते हैं।

आपको "साइटफोरिगिन" के साथ कहीं भी मिल सकता है जो उस स्थान को संदर्भित करता है जहां आपका .exe चल रहा है।

Source="pack://siteoforigin:,,,/../Modules/Icons/Icon.png" 

या

Source="pack://siteoforigin:,,,/Icons/Icon.png" 

हालांकि यह रिश्तेदार पथ का समर्थन नहीं कर सकते हैं। जब पैक यूआरआई के साथ प्रयोग PackUriHelper का उपयोग कर उन्हें निर्माण करने के लिए है

Source="Icons/Icon.png" 

एक टिप है, ताकि आप उचित के अनुरूप:

Source="../Modules/Icons/Icon.png" 

और यह:

इस रूप में अच्छी तरह एक शॉट दे दो वाक्य रचना/अर्थ विज्ञान।

देखें कुछ संबंधित पोस्ट:


एक और विचार ....

आप सी अपने स्वयं के मार्कअप एक्सटेंशन को परिभाषित किया जाएगा जो आपकी पीएनजी फाइलों के लिए एक पूर्ण पथ बनाने में मदद करता है।

आपके पास एक वैश्विक कॉन्फ़िगरेशन सेटिंग होगी जो लोडफ़्रॉम के साथ आपके डीएलएल की लोडिंग से ठीक पहले सेट हो गई थी।

Source={local:MyMarkupExtensionPathBuilder Icon.png} 

इस का प्रयोग करें एक प्रारंभिक बिंदु के रूप में ... आपके मामले में आप "आवेदन: //" का उपयोग नहीं करना चाहते हैं:

तो फिर आप अपने XAML एक्सटेंशन का उपयोग होगा हालांकि ... आप यूरी को सीधे पूर्ण "फ़ाइल" पथ प्रकार यूआरआई उदाहरण के रूप में बनाना चाहते हैं "सी: \ प्रोग्राम फ़ाइलें \ myapplication \ रूट \ मॉड्यूल \ प्रतीक \ icon.png"।

आप BitmapSource सीधे वापस जाने के लिए (या बस वैसे भी जो फिर एक TypeConverter एक BitmapSource पर ले कर यह एक स्ट्रिंग वापस जाने के लिए मिलता है ...) अपने MarkupExtension मिल सकती है।

(आप बाध्यकारी के साथ ऐसा कुछ भी कर सकते हैं जो पथ के 2 हिस्सों को संयोजित करने के लिए कनवर्टर का उपयोग करता है, या यदि आप एक का उपयोग करते हैं तो अपना व्यूमोडेल संगतता करते हैं ... मार्कअपक्स्टेंशन इसे करने का एक साफ तरीका है हालांकि)

+0

हाय, धन्यवाद, लेकिन मैं XAML फ़ाइल के भीतर assembly.exe से असेंबली पथ पर सापेक्ष पथ नहीं जानता। तो शायद "मॉड्यूल" फ़ोल्डर कहीं और संग्रहीत किया जाता है। तो केवल विधानसभा और Icon.png एक ही फ़ोल्डर में हैं और विधानसभा में UserControl Icon.png दिखाएगा। पथ/यूआरआई एक्सएएमएल कोड में सेट किया जाना चाहिए। –

+0

यह काम नहीं करता है। मैंने पहले से ही कोशिश की, जैसा कि आप मेरी पहली पोस्ट में देख सकते हैं। और निश्चित रूप से Icon.png सही फ़ोल्डर में मौजूद है ;-) मुझे लगता है कि असेंबली को मैन्युअल रूप से लोड करने के साथ इसका कोई लेना-देना नहीं है, क्योंकि मैंने एक परीक्षण समाधान बनाया है और वहां मेरे पास एक एप्लिकेशन और क्लास लाइब्रेरी है, और मैंने एक संदर्भ सेट किया है क्लास लाइब्रेरी में और सीधे MainWindow.xaml में क्लास लाइब्रेरी से UserControl जोड़ा। सब कुछ एक ही आउटपुट फ़ोल्डर में है। यूआरआई को असेंबली के लिए एक सापेक्ष पथ होना चाहिए जिसमें UserControl और Icon.png (फ़ाइल के रूप में) शामिल है। –

+0

साइटफोरिगिन केवल काम करता है, अगर सबकुछ एक ही फ़ोल्डर में है (या हो सकता है कि मैं एप्लिकेशन से संबंधित मोड को मॉड्यूल फ़ोल्डर में जानता हूं)। बीटीडब्ल्यू: मैं असेंबली का उपयोग करता हूं। लोडफ्रॉम। असेंबली कंप्यूटर पर हर जगह संग्रहीत किया जा सकता है। यही कारण है कि मैं डिजाइन समय पर असेंबली में आवेदन से सापेक्ष पथ नहीं जानता। –