2010-01-11 7 views
6

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

<Window> 
<Window.Resources> 
    <ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="path.to.xaml.file"/> 
      <ResourceDictionary> 
       <Style TargetType="{x:Type Border}" x:Key="TypeBlock"> 

       </Style> 
       <Style TargetType="{x:Type Border}" x:Key="SetBlock"> 

       </Style> 
      </ResourceDictionary> 
     </ResourceDictionary.MergedDictionaries> 
    </ResourceDictionary> 
</Window.Resources> 
.... 
</Window> 

कोड का यह छोटा सा टुकड़ा दुर्घटना होगा:

Item has already been added. Key in dictionary: 'System.Windows.Controls.Border' Key being added: 'System.Windows.Controls.Border' 

हम तो जाने का रास्ता इस तरह स्थानीय और वैश्विक संसाधनों मर्ज करने के लिए, एक MergedDictionaries टैग बनाने के लिए है MergedDictionaries टैग निकालने के लिए, कोड के रूप में की उम्मीद चलेंगे:

<Window> 
<Window.Resources> 
    <Style TargetType="{x:Type Border}" x:Key="TypeBlock"> 

    </Style> 
    <Style TargetType="{x:Type Border}" x:Key="SetBlock"> 

    </Style> 
</Window.Resources> 
</Window> 

मुझे समझ नहीं आता क्यों यह अपवाद है जब हम विलय संसाधन का उपयोग फेंकता है। बेशक, फिक्स अभी के लिए काफी आसान है (संसाधनों को निम्न स्तर पर ले जाएं)। यह जानना अच्छा होगा कि यह 'सामान्य' व्यवहार है ...

+1

उस विशिष्ट त्रुटि संदेश की खोज करने वाले लोगों के लिए अतिरिक्त जानकारी: मुझे इस समस्या का सामना करना पड़ा जब गलती से एक ही 'लक्ष्य प्रकार' और 'x: key' विशेषता' के साथ दो शैलियों का उपयोग किया गया। उनमें से एक को हटाने (उदा। अपनी सामग्री को दूसरे में विलय करके) ने इस समस्या को हल किया। – Jan

उत्तर

10

यदि आपके संसाधन एक अलग फ़ाइल में स्थित नहीं हैं, तो वे मर्ज किए गए शब्दकोशों का हिस्सा नहीं बनना चाहिए। इस तरह से उन्हें बाहर ले जाएँ:

<Window.Resources> 
    <ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="path.to.xaml.file"/> 
     </ResourceDictionary.MergedDictionaries> 

     <Style TargetType="{x:Type Border}" x:Key="TypeBlock"> 

     </Style> 
     <Style TargetType="{x:Type Border}" x:Key="SetBlock"> 

     </Style> 
    </ResourceDictionary> 
</Window.Resources> 

जिसके अनुसार, त्रुटि संदेश एक छोटे से भ्रामक है और XAML संकलक में एक बग का एक परिणाम हो सकता है।

+0

ठीक है, मैं देखता हूं, जानकारी के लिए धन्यवाद! – RoelF

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

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