2012-11-22 14 views
5

संपादित अंदर: यह समस्या तब होती है जब मानक नेट ResourceDictionary रूप में अच्छी तरह का उपयोग करने और संसाधन शब्दकोशों का उपयोग कर नियंत्रण या डेटा टेम्पलेट्स के अंदर के साथ कोई समस्या प्रतीत होता है।कस्टम संसाधन शब्दकोश ControlTemplate या DataTemplate

मैं एक कस्टम संसाधन शब्दकोश है कि साझा संसाधन उदाहरणों के लिए एक आम दृष्टिकोण निम्नानुसार है।

http://softnotes.wordpress.com/2011/04/05/shared-resourcedictionary-for-silverlight/ http://www.wpftutorial.net/MergedDictionaryPerformance.html

public class SharedResourceDictionary : ResourceDictionary 
{ 
    static readonly Dictionary<Uri, WeakReference<ResourceDictionary>> SharedDictionaries = new Dictionary<Uri, WeakReference<ResourceDictionary>>(); 

    Uri _sourceUri; 

    public new Uri Source 
    { 
     get 
     { 
      // Behave like standard resource dictionary for IDE... 
      if (VisualStudio.IsInDesignMode) 
       return base.Source; 

      return this._sourceUri; 
     } 
     set 
     { 
      // Behave like standard resource dictionary for IDE... 
      if (VisualStudio.IsInDesignMode) 
      { 
       base.Source = value; 
       return; 
      } 

      this._sourceUri = value; 

      WeakReference<ResourceDictionary> cached; 
      if (SharedDictionaries.TryGetValue(value, out cached)) 
      { 
       ResourceDictionary rd; 
       if (cached.TryGetTarget(out rd)) 
       { 
        this.MergedDictionaries.Add(rd); 
        return; 
       } 
      } 

      base.Source = value; 
      SharedDictionaries[value] = new WeakReference<ResourceDictionary>(this); 
     } 
    } 
} 

यह ठीक काम करता है, लेकिन जब भी यह एक ControlTemplate या DataTemplate के भीतर एक संसाधन तत्व के अंदर संदर्भित है, वहाँ से पता चला नकली त्रुटियाँ हैं (इन निर्माण, जो अभी भी सफल होता है को प्रभावित नहीं करते) ।

Unable to cast object of type 'Microsoft.Expression.Markup.DocumentModel.DocumentCompositeNode' to type 'System.Windows.ResourceDictionary' 

नमूना XAML:

यह एक मानक ResourceDictionary जो मर्ज किए गए अपने शब्दकोशों में SharedResourceDictionary शामिल के लिए दिखाया जाता है

<DataTemplate DataType="{x:Type vm:MyViewModel}"> 
    <DockPanel Style="{DynamicResource MainDockPanel}"> 
     <DockPanel.Resources> 
      <ResourceDictionary> 
       <ResourceDictionary.MergedDictionaries> 
        <p:SharedResourceDictionary Source="/MyAssembly;component/MyResources.xaml" /> 
       </ResourceDictionary.MergedDictionaries> 
      </ResourceDictionary> 
     </DockPanel.Resources> 
    </DockPanel> 
</DataTemplate> 

किसी को कैसे मैं इस उपद्रव त्रुटि समाप्त कर सकते हैं किसी भी विचार है?

धन्यवाद

+0

आम दृष्टिकोण? क्या आपके पास इस तकनीक पर व्यापक चर्चा के लिए कोई लिंक है? –

+0

यहां एक है ... मेरे पास समय है जब मैं बाद में खोदूँगा। http://softnotes.wordpress.com/2011/04/05/shared-resourcedictionary-for-silverlight/ –

+0

http://www.wpftutorial.net/MergedDictionaryPerformance.html –

उत्तर

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