मेरे पास एक WPF नियंत्रण लाइब्रेरी है जिसे विंडोज़ फॉर्म एप्लिकेशन में जोड़ा जा रहा है। हम नियंत्रण को स्थानीयकरण योग्य होने की अनुमति देना चाहते हैं, हालांकि मुझे यकीन नहीं है कि कोड को डुप्लिकेट किए बिना इसे पूरी तरह से कैसे पूरा किया जाए। This is what I am doing now।क्या एक WPF नियंत्रण लाइब्रेरी में StaticResource का उपयोग करने का कोई तरीका है और डिज़ाइन-टाइम पर देखने में सक्षम है?
असल में, विंडोज़ ऐप में, मुख्य एप्लिकेशन को बंद करने से पहले, मैं ऐप.एक्सएएमएल को तत्काल बना रहा हूं जो फॉर्म ऐप के भीतर रहता है (मेरे संसाधनों के लिए मेरे लिंक जो फॉर्म एप के भीतर भी रहते हैं)। यह रनटाइम के लिए पूरी तरह से काम करता है।
हालांकि, मेरे उपयोगकर्ता नियंत्रण में Content="{StaticResource SomeVariableName}"
है, जो खाली होने पर समाप्त होता है। मैं इसे अपने नियंत्रण पुस्तकालय में app.xaml और उचित संसाधन शब्दकोश रखने के द्वारा ठीक कर सकता हूं जो मेरे विंडोज़ फॉर्म ऐप से मेल खाता है। हालांकि, यह डुप्लिकेट कोड है।
बातें मैं पहले से ही कोई फायदा नहीं हुआ है:
- App.xaml कि मेरी रूपों अनुप्रयोग के भीतर से उपयोगकर्ता नियंत्रण पुस्तकालय के अंदर रहता है इन्स्तांत। यह काम नहीं करता है क्योंकि मेरे संसाधनों के लिए यूआरआई एक एम्बेडेड संसाधन की तलाश में है, न कि मेरे स्थानीय संसाधन शब्दकोश (मैं बस संसाधन फ़ाइलों को नियंत्रण से अपने फॉर्म ऐप के भीतर एक उचित स्थान पर कॉपी कर सकता हूं)। क्या मैं यहां DeferrableContent का लाभ उठा सकता हूं? जहां तक मुझे इस विशेषता पर और ऑनलाइन इसका उपयोग कैसे किया जाना चाहिए, वहां बहुत अधिक ऑनलाइन नहीं है।
- मैं ऐप और शब्दकोश दोनों के लिए पोस्ट बिल्ड का उपयोग करना चाहता हूं, हालांकि, ऐप इंस्टेंटेशन एक संकलित App.xaml का एक स्थिर संदर्भ है जहां तक मैं कह सकता हूं। तो, App.xaml प्रपत्र के भीतर रहते हैं
- कम से कम मैं एक पोस्ट का निर्माण resourcedictionary.xaml चलती के साथ एक दोहराया App.xaml की कोशिश किया जाना चाहिए। मुझे लगा कि एक डुप्लिकेट ऐप.एक्सएएमएल ठीक है क्योंकि यह चालक बल है और हो सकता है कि आप किसी भी नियंत्रण से किसी पर भरोसा नहीं करना चाहें (जो वापस सर्किल करता है और आपको आश्चर्य होता है कि क्या आपके पास नियंत्रण में App.xaml होना चाहिए सब? जब तक आप एम्बेडेड संसाधनों का उपयोग करने वाले डिफ़ॉल्ट को अनुमति नहीं देना चाहते हैं ....) यह भी असफल रहा कि यह संसाधन नहीं मिला है, भले ही यह रखा गया था जहां यूआरआई को इंगित करना चाहिए था।
Uri resourceLocater = new Uri("/WindowsFormsApplication3;component/app.xaml", UriKind.Relative);
- कम से कम मैं एक पोस्ट का निर्माण resourcedictionary.xaml चलती के साथ एक दोहराया App.xaml की कोशिश किया जाना चाहिए। मुझे लगा कि एक डुप्लिकेट ऐप.एक्सएएमएल ठीक है क्योंकि यह चालक बल है और हो सकता है कि आप किसी भी नियंत्रण से किसी पर भरोसा नहीं करना चाहें (जो वापस सर्किल करता है और आपको आश्चर्य होता है कि क्या आपके पास नियंत्रण में App.xaml होना चाहिए सब? जब तक आप एम्बेडेड संसाधनों का उपयोग करने वाले डिफ़ॉल्ट को अनुमति नहीं देना चाहते हैं ....) यह भी असफल रहा कि यह संसाधन नहीं मिला है, भले ही यह रखा गया था जहां यूआरआई को इंगित करना चाहिए था।
तो करने के लिए decompiled कोड अंक, वहाँ काम करते हैं और घटक चूक के डिजाइन समय को देखने की है और दोहराव से बचने के लिए इस के लिए अनुमति देने के लिए कोई तरीका है? या, इस मामले में नकल ठीक है? यदि मेरी दूसरी बुलेट की उप-वस्तु ठीक लगती है (नकल किए गए App.xaml को प्रतिलिपि बनाई गई पुनर्वितरण के साथ), मैं इसे घटक स्तर आइटम की तलाश कैसे नहीं कर सकता, बल्कि इसके बजाय फ़ाइल स्तर एक?
अंतिम प्रश्न (और यदि आवश्यक हो तो मैं इसे अलग से पोस्ट कर सकता हूं) कि मैंने अभी ध्यान दिया है। मेरा App.xaml कोड में बनाया जा रहा है, जिससे मुझे फ्लाई पर नए संसाधन शब्दकोश बनाने की अनुमति नहीं मिलती है। क्या इसे करने का कोई तरीका है?
अंतिम विकल्प ... संभवतः सबसे अच्छा विकल्प? - I plan on using Andre van Heerwaarde's code anyway, तो क्या मुझे सिर्फ फाइल के अस्तित्व की जांच करनी चाहिए और इसे फ्लाई पर मर्ज किए गए संसाधन के रूप में जोड़ना चाहिए? असल में, मेरे उपयोगकर्ता नियंत्रण में एक App.xaml है जो एक डिफ़ॉल्ट एम्बेडेड संसाधन डिक्शनरी से लिंक है। और, फिर कोड फ्लाई पर उपयुक्त स्थानीय संसाधनों के लिए देखो, जो सापेक्ष फ़ाइल पथ हो सकता है? यहां केवल एकमात्र नकारात्मकता यह है कि फ्लाई पर डिफॉल्ट को बदला नहीं जा सकता है ... जिसे मैं शायद किसी निर्दिष्ट स्थान (कुछ प्रकार के सम्मेलन का उपयोग करके) में देख सकता हूं और क्या इसे अंतर्निहित एक पर पसंद किया है?
ओह, और एम्बेडेड संसाधनों को न चाहने का मेरा कारण यह है कि अंतिम उपयोगकर्ता बिल्ड किए जाने के बाद नए स्थानीय संसाधनों को जोड़/संशोधित कर सकते हैं।
मैं कोड जोड़ सकता हूं अगर यह आपको बेहतर तरीके से देखने में मदद करेगा, बस मुझे बताएं।
अद्यतन
मैं अब स्टाइल के साथ एक आगे समस्या में चल रहा हूँ और सिर्फ स्थानीयकृत नहीं।
<Button Style="{StaticResource GrayButton}"
कुछ और बातें मैंने कोशिश की/सोचा:
- मैं एक App.xaml नहीं बना सकते हैं (कि
यहाँ नियंत्रणों में से एक पर आंतरिक बटनों में से एक का एक उदाहरण है कभी भी इस्तेमाल नहीं किया जाएगा) पुस्तकालय परियोजनाओं में अनुप्रयोग परिभाषाओं के रूप में स्थापित संसाधन डिक्शनरी के साथ स्थापित नहीं किया गया है। मैं इसे नियंत्रण के संसाधनों में एम्बेड कर सकता हूं, लेकिन फिर हमेशा किसी भी अनुप्रयोग स्तर संसाधनों पर प्राथमिकता लेनी होगी और मैं अनुकूलन खो देता हूं।
Here is a connect case है कि वास्तव में, मैं के लिए क्या देख रहा हूँ की तरह लगता है, लेकिन यह (परे top..which काम नहीं करता है) कि मुझे लगता है कि के बारे में सोच सकते हैं कि इस
समाधान के लिए किसी भी वास्तविक समाधान प्रदान नहीं करता है काम कर सकता है (और अभी तक कोशिश करने के लिए) कुछ ऐसा काम करने के लिए भी लगता है जो मुझे लगता है कि सरल होना चाहिए। लेकिन, मैं उस नियंत्रण में कुछ निर्भरता गुणों को बनाने में सक्षम हो सकता हूं जिन्हें मैं बांध सकता हूं और फिर उन परियोजनाओं को ओवरराइड करने की अनुमति देता हूं जो नियंत्रण का उपयोग करेंगे। जैसा कि मैंने कहा, यह एक बहुत ही सरल अनुरोध के लिए बहुत सारे काम की तरह लगता है :)। क्या यह भी काम करेगा? और सबसे महत्वपूर्ण बात यह है कि क्या एक बेहतर, सरल समाधान है जिसे मैं याद कर रहा हूं?
+1 यह अब तक का सबसे अच्छा जवाब है जिसे मैंने वास्तव में देखा है। ऐसा करके, मैं अपना संसाधन कोड कहीं भी डाल सकता हूं, और इसे कार्य कर सकता हूं हालांकि मुझे इसे कार्य करने की आवश्यकता है। लेकिन, यह डिजाइनर में कैसे काम करेगा? क्या यह MyResources का एक उदाहरण नया होगा और डिफ़ॉल्ट का उपयोग करेगा? –
जहां तक मुझे याद है, हाँ। –
+1 शानदार!इस तरह से संपर्क करने के लिए कभी भी मेरे दिमाग को पार नहीं किया! – Dom