2010-04-12 11 views
7

मैं पीछे कोड पर wpf संसाधन शब्दकोश विलय करने की कोशिश कर रहा हूं लेकिन कुछ आक्रमण के लिए यह काम नहीं कर रहा है। मैं शब्दकोशों मर्ज दस्तावेज़ को ही यह उदाहरण के लिए चल रहा है पर कोशिश करते हैं:विलय संसाधन शब्दकोश

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
xmlns:local="clr-namespace:WpfApplication212;assembly=WpfApplication212"> 

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

<Style TargetType="{x:Type local:URComboBox}" BasedOn="{StaticResource ComboBoxStyle}"> 
</Style> 

यह काम कर रहा है, लेकिन अगर मैं ResourceDictionary.MergedDictionaries और कोड में टिप्पणी इस कोशिश:

ResourceDictionary skin = new ResourceDictionary(); 
skin.Source = styleLocation; 
ResourceDictionary skinFather = new ResourceDictionary(); 
skinFather.MergedDictionaries.Add(skin); 
skinFather.Source = styleLocationFather; 

यह तोड़ देगा क्योंकि संसाधन नहीं मिल रहा है।

+1

"styleLocation" और "styleLocationFather" क्या है? –

उत्तर

6

आप कोड से संसाधन शब्दकोश लोड करने के लिए स्रोत प्रॉपर्टी का उपयोग नहीं कर सकते हैं।

MSDN से:

"मर्ज किए गए शब्दकोशों कोड के माध्यम से एक संसाधन शब्दकोश में जोड़ा जा सकता है डिफ़ॉल्ट, शुरू में खाली ResourceDictionary है कि किसी भी संसाधन संपत्ति भी एक डिफ़ॉल्ट, शुरू में खाली MergedDictionaries संग्रह संपत्ति है के लिए मौजूद करने के लिए।। कोड के माध्यम से एक विलय शब्दकोश जोड़ें, आप वांछित प्राथमिक संसाधन डिक्शनरी का संदर्भ प्राप्त करते हैं, इसके मर्ज किए गए शब्दकोश संपत्ति मान प्राप्त करते हैं, और मर्ज किए गए डिक्शनरी में जेनेरिक संग्रह पर कॉल जोड़ें। आपके द्वारा जो ऑब्जेक्ट जोड़ा गया है वह एक नया संसाधन डिक्शनरी होना चाहिए। कोड में, आप स्रोत प्रॉपर्टी सेट न करें। इसके बजाय, आपको एक बनाने या लोड करने के द्वारा संसाधन संसाधन ऑब्जेक्ट प्राप्त करना होगा XamlReader को कॉल करने के लिए मौजूदा संसाधन डिक्शनरी को लोड करने का तरीका। मौजूदा XAML फ़ाइल स्ट्रीम पर लोड करें जिसमें संसाधन डॉट है, फिर XamlReader कास्टिंग करें। संसाधन डिक्शनरी को संसाधन डिक्शनरी में डालें। "

इसलिए, कुछ छद्म कोड:

ResourceDictionary myResourceDictionary = XamlReader.Load(someXamlStreamReader); 
anotherResourceDictionary.MergedDictionaries.Add(myResourceDictionary); 

इसे कैसे करना की Here is another example:

Uri uri = new Uri("/PageResourceFile.xaml", UriKind.Relative); 
StreamResourceInfo info = Application.GetResourceStream(uri); 
System.Windows.Markup.XamlReader reader = new System.Windows.Markup.XamlReader(); 
Page page = (Page)reader.LoadAsync(info.Stream); 
संबंधित मुद्दे