2010-09-29 12 views
9

में एक कुंजी के साथ संसाधनों और एक मर्ज डिक्शनरी को परिभाषित करने के लिए कैसे करें यह शायद वास्तव में एक बेवकूफ सवाल है लेकिन मैं इसे समझ नहीं सकता।एसएल 4 पेज

मैं परिभाषित एक MergeDictionary के साथ एक पृष्ठ है:

<navigation:Page.Resources> 
     <ResourceDictionary> 
      <ResourceDictionary.MergedDictionaries> 
       <ResourceDictionary Source="../Assets/TourneySetupStyles.xaml"/> 
      </ResourceDictionary.MergedDictionaries> 
     </ResourceDictionary> 
    </navigation:Page.Resources> 

और मुझे कोई समस्या नहीं के साथ इस तरह मेरे XAML में TourneySetupStyles.xaml में शैलियों संदर्भ:

<TextBlock Text="Tourney Name:" Style="{StaticResource TourneySetupTextStyle}" /> 

हालांकि, अब मैं की जरूरत है इस प्रकार एक और पेज संसाधन जोड़ने के लिए:

लेकिन डिजाइनर अब एक चेतावनी फेंकता है: "डिजाइनर लोड हो रहा है शब्दकोशों कि 'ResourceDictionary' आइटम एक ही संग्रह में एक महत्वपूर्ण और अन्य वस्तुओं के बिना मिश्रण का समर्थन नहीं करता। कृपया सुनिश्चित करें कि 'संसाधन' प्रॉपर्टी में कुंजी के बिना 'रिसोर्स डिक्शनरी' आइटम नहीं हैं, या 'रिसोर्स डिक्शनरी' आइटम संग्रह में एकमात्र तत्व है। "

तो मैं इस तरह अपने संसाधन डिक्शनरी में एक कुंजी जोड़ता हूं: ।

<navigation:Page.Resources> 
     <local:Tournament x:Key="tournament" /> 
     <ResourceDictionary x:Key="whatever"> 
      <ResourceDictionary.MergedDictionaries> 
       <ResourceDictionary Source="../Assets/TourneySetupStyles.xaml"/> 
      </ResourceDictionary.MergedDictionaries> 
     </ResourceDictionary> 

    </navigation:Page.Resources> 

और चेतावनी चली जाती है लेकिन अब TourneySetupStyles में शैली के लिए मेरे संदर्भ नहीं रह गया काम करता है:

तो मुझे लगता है कि "नाम/कुंजी TourneySetupTextStyle के साथ एक संसाधन नहीं खोजा जा सका" खोज आयन है: अब मैं शैली को कैसे एक्सेस करूं कि संसाधन डॉट की कुंजी है?

+0

धन्यवाद! मुझे एक ही त्रुटि मिली (डब्ल्यूपीएफ में) और आपका समाधान काम करता है। – Noich

उत्तर

1

आह ऐसा लगता है कि घोषणाओं के क्रम महत्वपूर्ण है, जैसे ही मैं पहली बार संसाधन नीचे ले जाने के लिए अब यह काम करता है:

<navigation:Page.Resources> 
    <ResourceDictionary x:Key="TourneySetupStyles"> 
      <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="../Assets/TourneySetupStyles.xaml"/> 
      </ResourceDictionary.MergedDictionaries> 
     </ResourceDictionary> 
    <local:Tournament x:Key="tourneySetupViewModel" /> 
</navigation:Page.Resources> 

अगर कोई व्याख्या कर सकते हैं क्यों यह भविष्य में संदर्भ के लिए बहुत अच्छा होगा ...

8

मैं अभी इस में भाग गया - मैं डब्ल्यूपीएफ/सिल्वरलाइट को संकलित कर रहा हूं। संसाधन संसाधन नोड के अंदर स्थानीय संसाधन रखें, संसाधन डोड पर x: कुंजी न डालें।

<UserControl.Resources> 
    <ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="/mydll;component/folder/MyResDict.xaml" /> 
     </ResourceDictionary.MergedDictionaries> 

     <LinearGradientBrush x:Key="OrangeGradient" 
          EndPoint="0.5,1" 
          MappingMode="RelativeToBoundingBox" 
          StartPoint="0.5,0"> 
      <LinearGradientBrush.RelativeTransform> 
       <RotateTransform CenterY="0.5" 
            CenterX="0.5" /> 
      </LinearGradientBrush.RelativeTransform> 
      <GradientStop Color="#FFF3801E" /> 
      <GradientStop Color="#FFEDB17E" 
          Offset="0.5" /> 
      <GradientStop Color="#FFF3801E" 
          Offset="1" /> 
     </LinearGradientBrush> 
    </ResourceDictionary> 
</UserControl.Resources> 

मैं क्यों व्याख्या नहीं कर सकते - लेकिन मैं यह काम करता है पता है ...

hth

+1

हम्म, तो आपको उस कोड के साथ डिज़ाइन-टाइम त्रुटि नहीं मिली है? – Rodney

+0

ओह नहीं ... लेकिन मैंने क्रॉस-संकलित कोड लिखना शुरू करने के लगभग 2 सप्ताह बाद वीएस और ब्लेंड में डिजाइनरों को छोड़ दिया। वे बस काम नहीं करते हैं। – chadbr

+0

यदि मैं डिजाइनरों का उपयोग करना चाहता हूं, तो मैं एक अलग WPF या सिल्वरलाइट केवल प्रोजेक्ट का उपयोग करता हूं, अपना डिज़ाइन काम करता हूं, फिर इसे अपने "वास्तविक" प्रोजेक्ट में लाता हूं और यह समझता हूं कि इसे क्रॉस-कंपाइल करने के लिए कैसे प्राप्त किया जाए। डिजाइनर में लोड होने के बाद यह असंभव के करीब है। मैंने एक खुला कनेक्ट मुद्दा खोल दिया है जिसे एमएस द्वारा काम किया जा रहा है, लेकिन यह वास्तव में कहीं भी नहीं जा रहा है। – chadbr

0

मैं एक ही समस्या बारे में जाना।

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

पूर्व:

<ResourceDictionary> 

     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="Resources\Brushes\Brushes_Dictionary.xaml" /> 
      <ResourceDictionary Source="Resources\Storyboards\Storyboard_Dictionary.xaml" /> 
     </ResourceDictionary.MergedDictionaries> 

    </ResourceDictionary> 

</Application.Resources> 

+0

हाय स्कॉट, क्या मेरा समाधान आपके लिए काम नहीं करता है? – Rodney

0

हाँ, मैं सिर्फ इस ने काट लिया गया है। जैसे ही सिल्वरलाइट मर्ज किए गए संसाधन शब्दकोश को लोड करता है, यह आपके द्वारा पहले से जोड़े गए सभी स्थानीय संसाधनों को हटा देता है! मेरे मामले में मुझे InitalizeComponent() कॉल से पहले प्रोग्रामेटिक रूप से संसाधन जोड़ने की आवश्यकता है, लेकिन चूंकि UserControl में विलय संसाधन संसाधन शामिल है जो संसाधन खो गया है। आईएमएचओ यह सिल्वरलाइट में एक बग है।

लेकिन संसाधन संसाधन के बाद संसाधन संसाधन आपके जैसे मामलों के लिए काम करेगा, इसलिए मैंने इसे वोट दिया है।

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