2012-12-02 48 views
10

मेरी स्थिति यह है। मेरे पास एक WPF समाधान के तहत कई परियोजनाएं हैं जो एक बहु-स्तरीय एप्लिकेशन बनाती हैं जो मैं विकसित कर रहा हूं। चूंकि अलग-अलग परियोजनाओं को कभी-कभी एक ही छवि या एक्सएमएल संसाधन तक पहुंचने की आवश्यकता होती है, इसलिए मैं "सार्वजनिक" संसाधनों को एक परियोजना में केंद्रीकृत करना चाहता हूं जिसे इन "सार्वजनिक" संसाधनों की आवश्यकता वाले किसी भी अन्य परियोजनाओं द्वारा संदर्भित किया जा सकता है। उदाहरण के लिए, मेरे पास एक बीएमपी छवि है जिसे मैं अलग-अलग परियोजनाओं में विभिन्न नियंत्रणों और खिड़कियों में उपयोग करता हूं जो बैनर/लोगो के रूप में कार्य करता है। ऐसा लगता है कि मुझे इस छवि को सार्वजनिक संसाधन प्रोजेक्ट के संसाधन के रूप में जोड़ने में सक्षम होना चाहिए और इसे अन्य परियोजनाओं में अलग-अलग छवि जोड़ने के बजाय इसे अन्य परियोजनाओं से संदर्भित करना चाहिए। यदि यह संभव है, तो यह कैसा दिखता है और मुझे इसे करने के बारे में कैसे जाना चाहिए? अगर मेरा विचार सिर्फ बेकार है तो मैं सुझावों के लिए खुला हूं, लेकिन परियोजना काफी बड़ी होगी, इसलिए मैं पूरी जगह संसाधनों को जोड़ना नहीं चाहता हूं।WPF केन्द्रीय xaml/image मल्टी-स्तरीय/परियोजना अनुप्रयोग समाधान में संसाधन

धन्यवाद!

पीएस मैंने इस विषय को काफी हद तक खोजा है लेकिन वहां से बहुत सारे कचरे के जवाब हैं जो नहीं जानते कि वे क्या कर रहे हैं। यह देखते हुए कि मैं डब्ल्यूपीएफ के लिए अपेक्षाकृत नया हूं, बल्कि मुझे अपनी समस्या का सीधा जवाब मिल जाएगा।

उत्तर

21

कुछ tinkering और शोध के बाद मुझे अपने खुद के प्रश्न का समाधान मिला। ऐसा लगता है कि बिट्स और मेरे उत्तर के टुकड़े पूरे वेब पर बिखरे हुए थे, इसलिए मैं एक ही स्थान पर एक ही चीज़ को पूरी तरह से समझाने की कोशिश करूंगा। पुन: कैप करने के लिए मैं मूल रूप से अपने समाधान के भीतर परियोजनाओं में उपयोग किए जाने वाले किसी भी संसाधन को केंद्रीकृत करना चाहता था। ये वे कदम हैं जिन्हें मैंने अंततः पूरा करने के लिए किया।

1. अपने समाधान में उपयोगकर्ता नियंत्रण प्रोजेक्ट बनाएं (कोई भी प्रोग्राम जो संसाधन शब्दकोश होस्ट कर सकता है)। मैं इस परियोजना को "संसाधन परियोजना" के रूप में संदर्भित करूंगा।

2. कोई भी संसाधन फ़ाइलें (छवियां आदि ...) जोड़ें जो आप प्रोजेक्ट्स के बीच संसाधन प्रोजेक्ट में साझा करना चाहते हैं। मैं उप-निर्देशिकाओं में फ़ाइलों को व्यवस्थित करने का प्रयास करता हूं जो समझ में आता है। आप निर्माण कार्य को "संसाधन" में सेट करना चाहते हैं ताकि यह आउटपुट बाइनरी में संकलित हो जाए।

3. अब संसाधन प्रोजेक्ट में संसाधन शब्दकोश जोड़ें। मेरे मामले में मैं कई छवियों का संदर्भ देना चाहता था इसलिए मैंने "ImageDictionary.xaml" नामक एक बनाया।

4. संसाधन शब्दकोश में छवि फ़ाइलों के संदर्भ जोड़ें। मैं यहां छवियों का संदर्भ दे रहा हूं लेकिन यह सिर्फ एक संसाधन शब्दकोश है, आप वहां जो भी डाल सकते हैं। मध्य में स्ट्रिंग केवल उस छवि फ़ाइल का सापेक्ष पथ है जिसका आप उल्लेख कर रहे हैं।

<ImageSource x:Key="SomeImageKey"> 
    Images/SomeImage.bmp 
</ImageSource> 

5. अब एक परियोजना है कि संसाधन शब्दकोश तुम सिर्फ कदम 4. यह किसी अन्य उपयोगकर्ता नियंत्रण या एक खिड़की, जो कुछ भी हो सकता है में किए गए की आवश्यकता है पर जाएँ। प्रोजेक्ट संदर्भों पर राइट-क्लिक करें और संसाधन प्रोजेक्ट का संदर्भ जोड़ें।

6. ठीक है अब वर्तमान प्रोजेक्ट को संसाधन प्रोजेक्ट में परिभाषित चरण 4 में किए गए शब्दकोश का संदर्भ देने की आवश्यकता है। मैंने पहले उपयोगकर्ता नियंत्रण किया था, इसलिए मेरा कोड नीचे जैसा दिखता है ... ध्यान दें कि मैंने मर्ज किए गए शब्दकोशों का उपयोग किया था। मैं बाद में उपयोग करने की योजना बना रहा हूं इसलिए मैंने एक शब्दकोश के बजाय इस तरह से चुना। नीचे "संसाधन प्रोजेक्ट" प्रोजेक्ट/असेंबली का नाम है जिसे आपने संसाधन जोड़ा है। "घटक" एक ऐसा कीवर्ड है जिसे वहां होना आवश्यक है, इसके बाद शब्दकोश xaml कोड फ़ाइल के पथ के बाद।

<UserControl.Resources> 
     <ResourceDictionary> 
      <ResourceDictionary.MergedDictionaries> 
       <ResourceDictionary Source="/ResourceProjectAssembly;component/Resources/ImageDictionary.xaml" /> 
      </ResourceDictionary.MergedDictionaries> 
     </ResourceDictionary>   
    </UserControl.Resources> 

जैसा कि आप देख सकते हैं, बाहरी संसाधन शब्दकोश को संदर्भित करने के लिए "पैक यूआरआई" कहा जाता है। मुझे ऐसा करने का एक छोटा सा तरीका मिला। लंबा रास्ता काफी उलझन में है और जहां तक ​​मुझे पता है, इसका कोई फायदा नहीं है। लेकिन यह वही है जो लंबा रास्ता दिखता है।

<UserControl.Resources> 
     <ResourceDictionary> 
      <ResourceDictionary.MergedDictionaries> 
       <ResourceDictionary Source="pack://application:,,,/ResourceProjectAssembly;component/Resources/ImageDictionary.xaml" /> 
      </ResourceDictionary.MergedDictionaries> 
     </ResourceDictionary>   
    </UserControl.Resources> 

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

<Image Source="{StaticResource SomeImageKey}" /> 

8. महत्वपूर्ण नोट! इससे मुझे कुछ समय पहले सिरदर्द हुआ क्योंकि मुझे यह पता चला। सुनिश्चित करें कि आपके समाधान में स्टार्टअप प्रोजेक्ट संसाधन संसाधन का संदर्भ है, भले ही स्टार्टअप प्रोजेक्ट संसाधन परियोजना का उपयोग न करे। (यानी संदर्भों पर राइट-क्लिक करें, संदर्भ जोड़ें आदि ...) संसाधन तब तक आउटपुट में संकलित नहीं होंगे जब तक आप ऐसा नहीं करते। यह हिस्सा मुश्किल था क्योंकि डिजाइनर मेरी छवियों को भी दिखा रहा था और मेरे पास कोई एक्सएमएल त्रुटियां नहीं थीं लेकिन रनटाइम पर यह सेट प्रॉपर्टी फेंक देगी और फ़ाइल अपवाद नहीं ढूंढ पाएगी। जब मैंने अपनी स्टार्टअप प्रोजेक्ट से अपनी संसाधन परियोजना का संदर्भ दिया तो यह दूर चला गया।

उम्मीद है कि यह किसी की मदद करता है। नीचे कुछ स्थानों (स्टैक ओवरफ्लो सहित) के कुछ लिंक दिए गए हैं जो मुझे सभी टुकड़ों को एक साथ रखने के लिए आवश्यक थे।

http://blogs.msdn.com/b/wpfsldesigner/archive/2010/06/03/creating-and-consuming-resource-dictionaries-in-wpf-and-silverlight.aspx

Load WPF styles or other Static Resources from an external file or assembly

ResourceDictionary in a separate assembly

+0

उत्कृष्ट अनुसंधान के वहाँ बिट। बस मुझे क्या चाहिए +1। – Andez

+0

बहुत बहुत धन्यवाद, मैं इसे पहले काम नहीं कर सका, क्योंकि मुझे चरण 8 :(याद आ रहा था। लेकिन अब यह काम करता है, शानदार :) – adminSoftDK

+0

क्या मैं संसाधन शब्दकोश में जोड़ सकता हूं? – bigworld12

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

  • कोई संबंधित समस्या नहीं^_^