यह उनका कहना है कि कनवर्टर अन्य पदों संदर्भ पहले से ही मौजूद है है, जो तुम क्यों कर सकते हैं लायक है कि कनवर्टर निर्दिष्ट पहली जगह में xaml में <Ellipse Fill="red">
। कनवर्टर System.Windows.Media.BrushConverter
है:
कोड ऊपर पूरी तरह से काम करता है: -1 और टिप्पणियों के जवाब में
myEllipse.Fill = new SolidColorBrush(Colors.Red);
संपादित:
BrushConverter bc = new BrushConverter();
Brush brush = (Brush) bc.ConvertFrom("Red");
अधिक कुशल तरीका पूर्ण सिंटैक्स का उपयोग करने के लिए है कोड कोड में, जो मूल प्रश्न पूछ रहा था। आप IValueConverter
चाहते हैं - इन्हें आम तौर पर बाध्यकारी परिदृश्यों के लिए उपयोग किया जाता है। एक TypeConverter
यहां सही समाधान है (क्योंकि आप एक स्ट्रिंग को स्ट्रिंग में ब्रश में कनवर्ट कर रहे हैं)। विवरण के लिए this article देखें।
आगे संपादित (Aviad की टिप्पणी को पुन: पढ़ने के बाद): आप स्पष्ट रूप से Xaml में TypeConverter
उपयोग करने की आवश्यकता नहीं है - यह आप के लिए प्रयोग किया जाता है। अगर मैं यह लिख Xaml में:
<Ellipse Fill="red">
... तो क्रम स्वतः एक BrushConverter
का उपयोग करता स्ट्रिंग एक ब्रश में शाब्दिक चालू करने के लिए। Xaml अनिवार्य रूप से बराबर पूरे अक्षरों में लिखावट में बदल जाता है यही कारण है कि:
<Ellipse>
<Ellipse.Fill>
<SolidColorBrush Color="#FFFF0000" />
</Ellipse.Fill>
</Ellipse>
तो तुम सही हो - आप Xaml में इसका इस्तेमाल नहीं कर सकते हैं - लेकिन आप की जरूरत नहीं है।
भले ही आपके पास स्ट्रिंग मान था कि आप भरने के रूप में बांधना चाहते हैं, तो आपको मैन्युअल रूप से कनवर्टर निर्दिष्ट करने की आवश्यकता नहीं है। Kaxaml से यह परीक्षण:
<Page
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:s="clr-namespace:System;assembly=mscorlib">
<Page.Resources>
<s:String x:Key="col">Red</s:String>
</Page.Resources>
<StackPanel>
<Ellipse Width="20" Height="20" Fill="{Binding Source={StaticResource col}}" />
</StackPanel>
</Page>
अजीब, तो आप सिर्फ StaticResource col
उपयोग कर सकते हैं नहीं है और अभी भी यह काम किया है - लेकिन यह बाध्यकारी है और स्वचालित रूप से ValueConverter
का उपयोग करता है एक ब्रश में स्ट्रिंग चालू करने के लिए।
स्रोत
2010-03-16 23:32:00
यदि आप 'रंग' ऑब्जेक्ट की बजाय 'ब्रश' ऑब्जेक्ट में कनवर्ट करेंगे तो यह सही होगा। बस 'कलर कनवर्टर' के बजाय 'ब्रश कनवर्टर' का उपयोग करके चाल चलनी चाहिए। हालांकि मुझे लगता है कि आपको उस कनवर्टर के उदाहरण की आवश्यकता है, 'ConvertFromString' विधि स्थिर नहीं है, है ना? –
यदि आप रंग का उपयोग करके बाध्य करते हैं तो आप कलर क्लास का उपयोग करने के लिए स्वतंत्र हैं, जिसमें रंगीन नामों पर इंटेलिजेंस भी है। –
ये कन्वर्टर्स * पहले से मौजूद हैं * .... –