2012-08-02 23 views
5

वापस करने के लिए ValueConverter का उपयोग करके मैं अपनी व्यावसायिक संस्थाओं में विभिन्न राज्यों के लिए स्थिर संसाधन स्थापित करने का प्रयास कर रहा हूं। विचार यह है कि मैं एक व्यापार कनवर्टर लेने के लिए एक मूल्य कनवर्टर का उपयोग कर सकता हूं और एल्गोरिदम के आधार पर इसी पृष्ठभूमि ब्रश को वापस कर सकता हूं। मैं संसाधनों को स्थिर होना चाहता हूं इसलिए मैं उन्हें डिजाइनर में डिज़ाइन कर सकता हूं और उन्हें विकास के दौरान कैसा दिखता हूं, इसका पूर्वावलोकन करने के लिए मैन्युअल रूप से उन्हें स्विच कर सकता हूं, लेकिन उन्हें प्रोग्रामिक रूप से उपयोग करने में सक्षम होना चाहिए।StaticResource

उद्देश्य इन पंक्तियों के साथ कुछ है करने के लिए किया जाएगा: निश्चित संसाधनों पेज/नियंत्रण/ढांचे पदानुक्रम में तत्व घोषित किये गए हैं, तो

public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     var data = value as DummyData; 

     if (data == null) 
      return null; 

     //Find resources 
     if (data.VarianceAmount >= 0) 
      return StaticResources.HighBackground; 
     else 
      return StaticResources.LowBackground; 
    } 

, मैं इसे कैसे मूल्य कनवर्टर अंदर से उपयोग करते हैं ? मैंने अपना वैल्यू कनवर्टर एक निर्भरता ऑब्जेक्ट पर सेट कर दिया है, लेकिन मुझे यकीन नहीं है कि वहां से पदानुक्रम कैसे नेविगेट करें।

उत्तर

10

चाल जब आप इसे बनाते हैं तो वांछित संसाधन मान कनवर्टर में पास करना है।

उदाहरण के लिए,

public class CustomColorConverter : IValueConverter 
    { 
    public SolidColorBrush HighBackground { get; set; } 
    public SolidColorBrush LowBackground { get; set; } 

    // remaining implementation... 
    } 

फिर अपने Xaml संसाधन अनुभाग में, आप इसे कुछ इस तरह (बेशक अपने स्वयं के संसाधनों का उपयोग कर) की घोषणा करेंगे:

<local:CustomColorConverter x:Key="BackgroundConverter" 
    HighBackground="{StaticResource HighlightBrush}" 
    LowBackground="{StaticResource NormalBrush}" /> 

इस का लाभ दिया है पुन: प्रयोज्य आप एक नई कुंजी के साथ एक और उदाहरण बना सकते हैं और विभिन्न ब्रश परिभाषित कर सकते हैं।

इसके अतिरिक्त, यह केवल कुछ भी के लिए काम कर सकता है, न कि केवल SolidColorBrushes; आप पूर्ण स्टाइल या टेम्पलेट्स को भी परिभाषित कर सकते हैं।

उम्मीद है कि मदद करता है।

+1

+1 बहुत बेहतर समाधान। मेरा जवाब हटा दिया है –