2011-04-22 18 views
7

में एक ResourceDictionary से StaticResource का उपयोग करते हैं मैं इन शब्दकोशों है:सिल्वरलाइट 4 - एक और

dict1.xaml: <Color x:Key="Color1">Red</Color>

dict2.xaml: <SolidColorBrush x:Key="Brush1" Color={StaticResource Color1} />

यह काम करता है:

App.xaml:

<MergedDictionaries> 
    <ResourceDictionary Source="dict1.xaml"/> 
<MergedDictionaries> 

SomePage.xaml:

<UserControl.Resources> 
    <MergedDictionaries> 
    <ResourceDictionary Source="dict2.xaml"/> 
    </MergedDictionaries> 
</UserControl.Resources> 

यह नहीं करता है:

App.xaml आवेदन स्तर पर दोनों मिल जाती हैं।

मुझे रंग 1 के बारे में कोई त्रुटि नहीं मिली है।

यह क्यों है?/क्या इसके आसपास कोई रास्ता है? मुझे पता है कि यह उदाहरण सरल है, लेकिन असली एक बहुत लंबा होगा। असल में मैं सिर्फ अलग अलग फ़ाइलों में मेरी शैली और टेम्पलेट्स व्यवस्थित करने के लिए कोशिश कर रहा हूँ:

  • रंग
  • अंतर्निहित शैलियों
  • स्पष्ट शैलियों

संपादन के लिए कई के लिए एक के लिए एक: दिलचस्प है, अगर RootVisual संपत्ति को सेट करने से पहले, मैं Application_Startup पर कोड में ऐसा करता हूं, मुझे त्रुटि नहीं मिलती है ... मैं बस इतना परेशान हूं!

उत्तर

5

दुर्भाग्यवश आप सिल्वरलाइट संसाधन प्रणाली में एक परेशान सीमा में भाग गए हैं, जिसे मैं कल्पना कर सकता हूं कि कुछ अनुकूलन समस्या है। यहां कुछ असीमित व्यवहार प्रतीत होता है जहां MergedDictionaries में प्रत्येक शब्दकोश समानांतर में लोड किया जाता है, इसलिए जब "dict2.xaml" लोड हो रहा है, तो आप मौजूद "dict1.xaml" की सामग्री पर भरोसा नहीं कर सकते हैं।

App.xaml:

<ResourceDictionary.MergedDictionaries> 
    <ResourceDictionary Source="dict2.xaml" /> 
<ResourceDictionary.MergedDictionaries> 

Dict2.xaml:

<ResourceDictionary> 
    <ResourceDictionary.MergedDictionaries> 
     <ResourceDictionary Source="dict1.xaml" /> 
    </ResourceDictionary.MergedDictionaries> 
    .... <!-- dict2 resource --> 
</ResourceDictionary> 
+0

क्या किसी ने इसे विंडोज 8/मेट्रो में काम करने के लिए प्राप्त किया है? – Nilzor

1

यह रूप में लंबे समय App.xaml

<Application.Resources> 
     <ResourceDictionary> 
      <ResourceDictionary.MergedDictionaries> 
       <ResourceDictionary Source="dict1.xaml" /> 
       <ResourceDictionary Source="dict2.xaml" /> 
      </ResourceDictionary.MergedDictionaries> 
     </ResourceDictionary> 
    </Application.Resources> 

में हो के रूप में आप शब्दकोश एक दूसरे से पहले मैं थोड़ा हैरान कुछ ऊपर के समान कार्य नहीं करेगा हूँ को परिभाषित कर रहे हैं।

+0

मैं पहले से ही करने की कोशिश की पर बनाने के लिए सावधान रहना होगा कि के रूप में इस पोस्ट करने से पहले वह स्पष्ट अपराधी होगा। हालांकि, ऐसी कोई किस्मत नहीं है। ऐसा लगता है कि एक साथ फिर से हल करने की कोशिश कर रहा है, जो सिर्फ हास्यास्पद रूप से मुझे परेशान कर रहा है क्योंकि मैं एक ऐसा मामला नहीं देख सकता जहां आप उस व्यवहार को चाहते हैं, खासकर यदि एमएस हमें 'डायनामिक रिसोर्स' – Kir

+0

नहीं देता है तो यह देखने में सहायक हो सकता है आपका app.xaml जैसा कि आपके असफल होने पर आपके पास है। मैंने इसे स्वयं किया है और इसे – tam

+0

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

1

तुम एक में कर सकते हैं -:

सरल समाधान Dict2 में Dict1 के विलय शामिल करने के लिए है @ एंथनी द्वारा प्रस्तावित तरीका है लेकिन यहां एक चेतावनी है - यदि आप अपना पहला संसाधन शब्दकोश उपयोग करते हैं, उदाहरण के लिए, 5 अन्य शब्दकोश तो इसे 5 बार लोड किया जाएगा और आपके पास समान संसाधन डिक्शनरी की 6 प्रतियां होंगी ऐरी (यह तब होता है जब आपने इसे App.xaml में संदर्भित किया) जो प्रदर्शन के लिए बहुत अच्छा नहीं है।इसे यहां से http://softnotes.wordpress.com/2011/04/05/shared-resourcedictionary-for-silverlight/ से चांदी के संसाधन संसाधन शब्दकोश के छोटे उप-वर्ग का उपयोग करके तय किया जा सकता है।

0

मैं इस पर टैम के साथ हूं। "विलय संसाधन शब्दकोशों के संग्रह में संसाधन लुकअप तर्क अंतिम में है, पहले बाहर।" दूसरे शब्दों में, यदि आपके पास एकाधिक शब्दकोश हैं जहां एक दूसरे का संदर्भ देता है तो संदर्भित संसाधन वाले शब्दकोश में स्टैक के शीर्ष पर होना चाहिए। सुनिश्चित करें कि आप सही क्रम में उन्हें संदर्भित कर रहे हैं बनाने के लिए और यकीन है कि ढेर के शीर्ष पर शब्दकोशों शब्दकोशों पर कोई निर्भरता है ढेर के नीचे

<Application.Resources>   
<ResourceDictionary> 
    <ResourceDictionary.MergedDictionaries>          
    <ResourceDictionary Source="Dict1.xaml" /> 
    <ResourceDictionary Source="dependsOnDict1.xaml" />     
    </ResourceDictionary.MergedDictionaries>   
</ResourceDictionary>  
</Application.Resources> 
+1

यह व्यवहार प्रदर्शित नहीं किया गया है। यदि यह मामला था, तो कोई समस्या नहीं होगी और मैं लगभग एक साल पहले इस प्रश्न को पोस्ट नहीं करता था। इसे आज़माएं और देखें :) – Kir