2012-11-15 15 views
5

XAML में संसाधन शब्दकोश रंग बदलने के लिए:कैसे क्रम

<ResourceDictionary> 
    <Color x:Key="BrushColor1">Red</Color> 
    <Color x:Key="BrushColor2">Black</Color> 

    <LinearGradientBrush x:Key="GradientBrush1" StartPoint="0,0.5" EndPoint="1,0.5"> 
     <GradientStop Color="{DynamicResource BrushColor2}" Offset="0" /> 
     <GradientStop Color="{DynamicResource BrushColor1}" Offset="1" /> 
    </LinearGradientBrush> 
</ResourceDictionary> 

सी # में:

public void CreateTestRect() 
    { 
     Rectangle exampleRectangle = new Rectangle(); 
     exampleRectangle.Width = 150; 
     exampleRectangle.Height = 150; 
     exampleRectangle.StrokeThickness = 4; 
     exampleRectangle.Margin = new Thickness(350); 

     ResourceDictionary resources = this.Resources; 
     resources["BrushColor1"] = Colors.Pink; 
     resources["BrushColor2"] = Colors.RoyalBlue; 
     Brush brush =(Brush)this.FindResource("GradientBrush1"); 

     exampleRectangle.Fill = brush; 
     canvas.Children.Insert(0, exampleRectangle); 
    } 

सी # में क्रम में उन लोगों के रंग तत्वों कैसे बदलने के लिए। LinearGradient ब्रश गतिशील रूप से बदलना चाहिए?

मैं कुछ इस तरह करना चाहते हैं:

(Color)(this.FindResource("BrushColor1")) = Colors.Pink; 

लेकिन मैं असफल रहा।

उत्तर

5

आप सीधे संसाधन शब्दकोश में मूल्य को ओवरराइट कर सकते हैं।

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

ResourceDictionary resources = this.Resources; // If in a Window/UserControl/etc 
resources["BrushColor1"] = System.Windows.Media.Colors.Black; 

कहा जा रहा है, मैं सामान्य रूप से यह नहीं कर रही है की सिफारिश करेंगे। इसके बजाए, मेरे पास रंगों के दो सेट होंगे, प्रत्येक की अपनी कुंजी होगी, और स्विच करने के लिए कुछ तंत्र का उपयोग करें ताकि आपके मूल्यों को रनटाइम पर किस रंग को असाइन किया जा सके। यह आपको इसके लिए संपूर्ण तर्क को xaml में छोड़ देता है।

+0

मैंने कोशिश की, लेकिन फिर भी मैं अपने कैनवास पर रंग नहीं बदल सकता। वैसे भी, धन्यवाद। – dongx

+0

@XiaoruiDong यह काम नहीं करेगा - आपको इसे बदलने के लिए संग्रहीत वास्तविक संसाधन शब्दकोश खोजने की आवश्यकता है। –

+1

मैंने अभी इसे हल किया है। ऐसा लगता है कि केवल ** LinearGradientBrush ** ** डायनामिक रिसोर्स ** का समर्थन नहीं करता है। बाकी ब्रश ** सॉलिडकोलर ब्रश ** इसका समर्थन करता है। – dongx

2

मैंने इसे हल किया। ऐसा लगता है कि केवल LinearGradientBrush रंग के लिए डायनामिक रिसोर्स का समर्थन नहीं करता है। यहां तक ​​कि आप गतिशील रंग को ओवरराइट करते हैं, LinearGradientBrush स्वयं अपडेट नहीं होगा। पीएस: सॉलिडकॉलर ब्रश रनटाइम रंग परिवर्तन का समर्थन करता है। कुछ नीचे के बजाय कार्य करें: LinearGradientBrush एक नेस्टेड जटिल ब्रश संसाधन शब्दकोश में परिभाषित में छिपा हुआ है

LinearGradientBrush linearGradientBrush = (LinearGradientBrush)(this.FindResource("GradientBrush1")); 
linearGradientBrush.GradientStops[0].Color = color1; 
linearGradientBrush.GradientStops[1].Color = color2; 

हैं, तो आप LinearGradientBrush उभरा है, और यह करने के लिए एक महत्वपूर्ण आवंटित।

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