2010-01-18 5 views
5

मैंने कुछ महीने पहले sharing resource dictionaries across assemblies पर एक प्रश्न पोस्ट किया था। यह पता चला है कि आप घटक संसाधन कुंजी मार्कअप एक्सटेंशन का उपयोग कर ऐसा कर सकते हैं। उस समय, मैं केवल एक डब्ल्यूपीएफ कस्टम कंट्रोल प्रोजेक्ट के साथ काम कर सकता था, न कि सादे क्लास लाइब्रेरी प्रोजेक्ट के साथ।डब्ल्यूपीएफ कस्टम कंट्रोल लाइब्रेरी और सादे क्लास लाइब्रेरी के बीच मतभेद?

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

तो, मेरा प्रश्न यह है कि: उपर्युक्त के अलावा, एक डब्ल्यूपीएफ कस्टम कंट्रोल लाइब्रेरी प्रोजेक्ट में क्या सादा क्लास लाइब्रेरी प्रोजेक्ट नहीं है? या, इसे एक और तरीका रखने के लिए, इस सुविधा को काम करने के लिए मैं अपनी कक्षा लाइब्रेरी प्रोजेक्ट में और क्या जोड़ सकता हूं? धन्यवाद।

+0

घटक संसाधन कुंजी मार्कअप एक्सटेंशन काम नहीं कर रहा है। मैंने दो समान समाधान स्थापित किए, एक कस्टम कंट्रोल लाइब्रेरी के साथ, और दूसरा डीएलएल रेफरी और थीम्स/जेनेरिक.एक्सएमएल के साथ एक सादे क्लास लाइब्रेरी के साथ। घटक संसाधन कुंजी मार्कअप एक्सटेंशन कस्टम नियंत्रण लाइब्रेरी में काम करता है, लेकिन क्लास लाइब्रेरी में नहीं। –

+0

मैंने कस्टम क्लास लाइब्रेरी को कस्टम कंट्रोल लाइब्रेरी के साथ बदलकर और क्लास लाइब्रेरी से सभी कक्षाओं को कस्टम कंट्रोल लाइब्रेरी में स्थानांतरित करके समस्या के आसपास काम किया है। लेकिन मैं अभी भी क्लास लाइब्रेरी को फिर से निकालने का तरीका जानना चाहूंगा, क्योंकि मैं शायद इस बार फिर से आऊंगा। –

+0

अजीब। निम्नलिखित मेरे लिए काम किया: एक क्लास लाइब्रेरी प्रोजेक्ट बनाएं, डब्ल्यूपीएफ डीएलएल संदर्भ जोड़ें, एक थीम्स/जेनेरिक.एक्सएएमएल जोड़ें (कोई रिसोर्स डिक्शनरी विकल्प नहीं है, जिसे उपयोगकर्ता नियंत्रण के रूप में बनाया गया है और एक संसाधन डिक्शनरी के लिए एक्सएएमएल संपादित किया गया है), एक कक्षा में एक सीआरके बनाया आपके लिंक किए गए प्रश्न पर), जेनेरिक.एक्सएएमएल के साथ एक संसाधन जोड़ा गया एक्स: कुंजी उस सीआरके पर सेट है। मेरे लिए ठीक संकलित (वीएस 2008 एसपी 1)। मुझे ThemeInfoAttribute की आवश्यकता नहीं थी जिसे कैमरून का उल्लेख है। क्या आपकी एक्सएएमएल फाइल पोस्ट करने लायक हो सकता है? – itowlson

उत्तर

6

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

[assembly: ThemeInfo(
    ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located 
    //(used if a resource is not found in the page, 
    // or application resource dictionaries) 
    ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located 
    //(used if a resource is not found in the page, 
    // app, or any theme specific resource dictionaries) 
)] 

ThemeInfoAttribute स्थान जिसमें विषय शब्दकोशों एक सभा में प्रकार के लिए जमा हो जाती है निर्दिष्ट करता है।

+0

ध्यान दें कि मैंने इस समाधान का परीक्षण नहीं किया है, लेकिन यह निश्चित रूप से समझ में आता है। मैं उम्मीद करता हूं कि उस विशेषता की कमी थीम्स/जेनेरिक.एक्सएमएल समर्थन को डायल करने के लिए। –

1

कैमरून मैकफ़ारलैंड का जवाब स्पॉट पर था। मैंने अब इसका परीक्षण किया है, और यह काम करता है।

यहां समाधान है: डीएलएल रेफरी और थीम्स/जेनेरिक.एक्सएमएल फ़ाइल को सादे क्लास लाइब्रेरी प्रोजेक्ट में जोड़ें। फिर, खुला AssemblyInfo.cs और फ़ाइल के अंत में निम्न कोड जोड़ें:

[assembly: ThemeInfo(
    ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located 
    //(used if a resource is not found in the page, 
    // or application resource dictionaries) 
    ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located 
    //(used if a resource is not found in the page, 
    // app, or any theme specific resource dictionaries) 
)] 

पुनः संकलित करें, और घटक संसाधन कुंजी मार्कअप विस्तार काम करना चाहिए।

वर्ग लाइब्रेरी में टैग याद आ रही है:

+0

मुझे ComponentResourceKeys के बजाय पैक यूआरआई का उपयोग करके क्रॉस-असेंबली संसाधन साझाकरण का एक आसान समाधान मिला।दृष्टिकोण यहां दस्तावेज किया गया है: http://stackoverflow.com/questions/2095031/wpf-sharing-resources-across-assemblies –

2

एक और अंतर यह .csproj फ़ाइल में है

<ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> 

पहले PropertyGroup करने के लिए इसे जोड़ने के बाद, इस परियोजना के ऐड मेनू अब ठेठ से पता चलता डब्ल्यूपीएफ फाइलें