2012-02-29 8 views
13
में एक अलग ResourceDictionary से एक ResourceDictionary में एक संसाधन संदर्भित

मैं अपने App.xaml में कोड की निम्न सेट है:सिल्वरलाइट

<Application.Resources> 
    <ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="/Client.Common;component/Theme/Brushes.xaml"/> 
      <ResourceDictionary Source="/Client.Common;component/Theme/Fonts.xaml"/> 
      <ResourceDictionary Source="/Client.Common;component/Theme/CoreStyles.xaml"/> 
      <ResourceDictionary Source="/Client.Common;component/Theme/SdkStyles.xaml"/> 
      <ResourceDictionary Source="/Client.Common;component/Theme/MyAppName.xaml"/> 

      <ResourceDictionary Source="/Client.Common;component/Controls/NavigationPanel.xaml"/> 
     </ResourceDictionary.MergedDictionaries> 
    </ResourceDictionary> 
</Application.Resources> 

NavigationPanel.xaml एक शैली है कि इस तरह दिखता है शामिल हैं:

<Style x:Key="NavigationPanelListBox" TargetType="ListBox"> 
    <Setter Property="Background" Value="{StaticResource DarkBackground}" /> 
    <Lots of XAML> 
</Style> 

{StaticResource DarkBackground}Brushes.xaml फ़ाइल में परिभाषित किया गया है (यानी पहले आर एसोर्स डिक्शनरी)। इसे

<SolidColorBrush x:Key="DarkBackground" Color="#FF707176" /> 

संसाधन शब्दकोश में परिभाषित किया गया है।

रनटाइम पर, मैं निम्नलिखित त्रुटि मिलती है:

Cannot find a Resource with the Name/Key DarkBackground [Line: 16 Position: 44] 

लाइन नंबर और स्थिति का संदर्भ App.xaml में NavigationPanel.xaml संसाधन शब्दकोश।

मैं ब्रश को अन्य नियंत्रणों से संदर्भित कर सकता हूं, बस शामिल संसाधन शब्दकोश नहीं।

मैं संदर्भ क्यों नहीं दे सकता या यह किसी संसाधन के संदर्भ को क्यों हल नहीं करता है जो विलय संसाधन शब्दकोश के उत्तराधिकारी में उच्च है ?? मुझे यहां क्या समझ नहीं आ रहा है?

उत्तर

13

क्या आप NavigationPanel शब्दकोश में किसी भी संसाधन में DarkBackground ब्रश का संदर्भ दे रहे हैं?

यदि आप हैं तो आपको Brushes संसाधन शब्दकोश को NavigationPanel शब्दकोश में मर्ज करने की आवश्यकता हो सकती है।

तो नेविगेशन पैनेल शब्दकोश में।

<ResourceDictionary.MergedDictionaries> 
    <ResourceDictionary Source="/Client.Common;component/Theme/Brushes.xaml" /> 
</ResourceDictionary.MergedDictionaries> 
+1

यह काम करता है और मैं समझता हूं कि यह अभी क्यों हल हो रहा है लेकिन यह उच्च स्तर के शब्दकोश में कब हल नहीं होता है? मैं आपके उत्तर को सही के रूप में चिह्नित कर रहा हूं, लेकिन अगर आपको पता है कि यह क्यों है तो मुझे स्पष्टीकरण पसंद आएगा। –

+0

इसे एक और धागे में मिला। वंशावली के लिए यहाँ छोड़ रहे हैं। https://social.msdn.microsoft.com/forums/windowsapps/en-US/2be9a5f6-5313-448d-a9d9-296bac42215e/using-style-defined-in-merged-dictionary-from-another-merged-dictionary? फोरम = wpdevelop इस के लिए Kamil Nieweglowski के लिए धन्यवाद और क्रेडिट। – Snouto

8

आप (जैसे सी # में 'का उपयोग') तो जैसे किसी अन्य रूप में एक शब्दकोश में शामिल कर सकते हैं:

<ResourceDictionary 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:navigation="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Navigation" 
    xmlns:uriMapper="clr-namespace:System.Windows.Navigation;assembly=System.Windows.Controls.Navigation" 
    xmlns:sys="clr-namespace:System;assembly=mscorlib" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:Controls="clr-namespace:APC.IKM.UI.SL.Controls" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d"> 

    <ResourceDictionary.MergedDictionaries> 
     <ResourceDictionary Source="Brushes.xaml"/> 
     <ResourceDictionary Source="Fonts.xaml"/> 
     <ResourceDictionary Source="CoreStyles.xaml"/> 
    </ResourceDictionary.MergedDictionaries> 

यह आपके लिए क्या देख रहे है? कॉस्मोपॉलिटन/मेट्रो प्रोजेक्ट टेम्पलेट का इसका एक अच्छा उदाहरण है ...

0

ट्रिपली उत्तर इस साइट में एरिक का उत्तर है: https://social.msdn.microsoft.com/forums/windowsapps/en-US/2be9a5f6-5313-448d-a9d9-296bac42215e/using-style-defined-in-merged-dictionary-from-another-merged-dictionary?forum=wpdevelop
Brushes.xaml और NavigationPanel.xaml को स्वतंत्र रूप से पार्स किया गया है और फिर एप्लिकेशन संसाधनों के मर्ज किए गए शब्दकोश में जोड़ा गया है ताकि वे एक-दूसरे के बारे में कुछ भी नहीं जानते।