2010-07-13 19 views
16

मैंने संसाधन लोगो में कई रंगों को परिभाषित किया है। उदाहरण:एक मूल्य कनवर्टर से संसाधन शब्दकोश में रंगों तक पहुंच

<ResourceDictionary ...> 
    <Color x:Key=Gray1>#FFF7F1F3</Color> 
    <Color x:Key=Gray2>#FFDDD8DA</Color> 
</ResourceDictionary>

तो मैं उन्हें एप्लिकेशन में हर जगह पुन: उपयोग कर सकता हूं।

अब मैंने आइटम को आंतरिक रंग को संबंधित रंग में बदलने के लिए एक मूल्य कनवर्टर लिखा था।

मैं मूल्य कनवर्टर के कोड में परिभाषित रंगों का उपयोग कैसे कर सकता हूं?

मेरा पहला विचार शब्दकोश को कनवर्टर पैरामीटर के रूप में पास करना था। लेकिन मुझे नहीं पता कि इसे कैसे प्राप्त किया जाए।



सादर

संपादित

Application.Current.Resources एक विकल्प नहीं है। क्योंकि मुझे बाद में इसका उपयोग नहीं होगा।

उत्तर

25

कनवर्टर पैरामीटर का उपयोग करने के बारे में कष्टप्रद बात यह है कि आपको बाध्यकारी उपयोग करने के लिए हर बार उस पाठ को जोड़ना होगा।

इसके बजाय आप संसाधन कनवर्टर को अपने कनवर्टर पर एक संपत्ति बना सकते हैं और जब आप कनवर्टर को तुरंत चालू करते हैं तो इसे सेट कर सकते हैं। कनवर्टर के लिए

कोड:

public class SomeConverter : IValueConverter 
{ 
    private ResourceDictionary _resourceDictionary; 
    public ResourceDictionary ResourceDictionary 
    { 
     get { return _resourceDictionary; } 
     set 
     { 
      _resourceDictionary = value; 
     } 
    } 

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     //do your own thing using the _dict 
     //var person = value as Person 
     //if (person.Status == "Awesome") 
     // return _resourceDictionary["AwesomeBrush"] 
     //else 
     // return _resourceDictionary["NotAwesomeBrush"]; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 

} 

इन्स्तांत और उपयोग कनवर्टर:

<Window.Resources> 
    <local:SomeConverter x:Key="MyConverter" > 
     <local:SomeConverter.ResourceDictionary> 
      <ResourceDictionary Source="SomeRandomResourceDictionary.xaml" /> 
     </local:SomeConverter.ResourceDictionary> 
    </local:SomeConverter> 
</Window.Resources> 

... 

<StackPanel Background="{Binding CurrentPerson, Converter={StaticResource MyConverter}}" > 
</StackPanel> 
+0

अच्छा एक। यह मेरा दिन बचाता है। धन्यवाद। – DHN

+2

बस इस पर आया - मैं इसे भी हासिल करने की कोशिश कर रहा हूं। क्या यह समाधान संसाधन डिक्शनरी में प्रत्येक आइटम का नया उदाहरण नहीं बनाता है? या WPF स्मार्ट यह पहचानने के लिए पर्याप्त है कि यह पहले ही लोड हो चुका है, और केवल मूल्यों का एक सेट उपयोग करने के लिए? – Ross

+0

विजुअल स्टूडियो 2015 और 2017 डिज़ाइन-मोड में एक त्रुटि फेंकता है: 'माइक्रोसॉफ्ट.विज़ुअल स्टूडियो। डिज़ाइनटूल। मार्कअप.डॉकमेंटमोडेल। डॉक्यूमेंट कॉम्पोजिट नोड' टाइप करने के लिए 'ऑन डिमांड रिसोर्स डिक्शनरी' प्रकार की ऑब्जेक्ट डालने में असमर्थ। इसे कैसे हराया जाए? – yatskovsky

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