2010-02-12 11 views
14

मुझे आश्चर्य है कि कोई मेरी मदद कर सकता है - मेरे पास एक लेबल है जिसे मुझे किसी भी 2 रंगों के बीच पार करने में सक्षम होना चाहिए जब कोड को पीछे कोड में बुलाया जाता है।ब्रश संपत्ति के लिए डब्ल्यूपीएफ रंगएनीमेशन

मेरे सबसे अच्छे प्रयास अब तक:

Private OldColor as Color = Colors.White 
Sub SetPulseColor(ByVal NewColor As Color) 
    Dim F As New Animation.ColorAnimation(OldColor, NewColor, New Duration(TimeSpan.Parse("00:00:01"))) 
    OldColor = NewColor 
    F.AutoReverse = False 
    PulseLogo.BeginAnimation(Label.ForegroundProperty, F) 

End Sub 

समस्या मेरे पास है ColorAnimation रिटर्न एक Media.Color और अग्रभूमि के लिए संपत्ति प्रकार ब्रश है।

मुझे पता है कि उचित ब्रश कैसे बनाएं, लेकिन एनीमेशन में इसे कैसे करें।

Googling से, यह मैं एक कनवर्टर की जरूरत है लगता है:

<ValueConversion(GetType(SolidColorBrush), GetType(SolidColorBrush))> _ 
Public Class ColorConverter 
    Implements IValueConverter 

Public Function Convert(ByVal value As Object, ByVal targetType As Type, ByVal parameter As Object, ByVal culture As System.Globalization.CultureInfo) As Object Implements System.Windows.Data.IValueConverter.Convert 
     Dim Color As Color = DirectCast(value, Color) 
     Return New SolidColorBrush(Color) 
    End Function 

    Public Function ConvertBack(ByVal value As Object, ByVal targetType As Type, ByVal parameter As Object, ByVal culture As System.Globalization.CultureInfo) As Object Implements System.Windows.Data.IValueConverter.ConvertBack 
     Return Nothing 
    End Function 

End Class 

लेकिन सभी उदाहरण मैं XAML में एनीमेशन के लिए यह बाँध देखा है - और मैं पीछे कोड में ऐसा करना चाहते हैं। ..

क्या कोई मुझे सही दिशा में इंगित कर सकता है?

धन्यवाद

उत्तर

21

इस के लिए सामान्य समाधान एक कनवर्टर का उपयोग नहीं करने के लिए, लेकिन इसके बजाय ब्रश का रंग चेतन करने के लिए। बहरहाल, यह आप एक PropertyPath, जो बदले में आप एक स्टोरीबोर्ड की जरूरत का मतलब है की जरूरत है ऐसा करने के लिए:

Storyboard s = new Storyboard(); 
s.Duration = new Duration(new TimeSpan(0, 0, 1)); 
s.Children.Add(F); 

Storyboard.SetTarget(F, PulseLogo); 
Storyboard.SetTargetProperty(F, new PropertyPath("Foreground.Color")); 

s.Begin(); 

(क्षमा सी # सिंटेक्स)

नोट SetTargetProperty कॉल में संपत्ति पथ, जो अग्रभूमि के माध्यम से नीचे को पार करता संपत्ति और परिणामस्वरूप ब्रश की रंग संपत्ति में।

आप अलग-अलग ढाल चेतन करने के लिए इस तकनीक का उपयोग कर सकते हैं एक ढाल ब्रश में बंद हो जाता है, आदि

+0

यह वास्तव में सुरुचिपूर्ण है - मैं इसे आजमाउंगा। [संपादित करें] त्रुटि: 'System.indows.Media.SolidColorBrush' पर 'रंग' प्रॉपर्टी को एनिमेट नहीं कर सकता क्योंकि ऑब्जेक्ट को सील कर दिया गया है या जमे हुए है। [मेरे कोड]: \t \t मंद br के रूप में SolidColorBrush = DirectCast ((PulseLogo.Foreground), SolidColorBrush) \t \t PulseLogo.Foreground.BeginAnimation (SolidColorBrush.ColorProperty, एफ) 'किसी भी मदद के लिए धन्यवाद – Basic

+0

क्षमा करें, आदमी, मैं गड़बड़। मैंने इसे पहले स्टोरीबोर्ड के साथ ही किया है और मैंने स्वाभाविक रूप से माना है कि मैं इसे सीधे एनालिनेशन कॉल में अनुवाद कर सकता हूं, जो गलत था। मैंने जवाब को अद्यतन किया है, अब वास्तविक \ * gasp \ * ईमानदार-से-भलाई परीक्षण कोड के साथ - उम्मीद है कि यह आपके लिए बेहतर काम करेगा। – itowlson

+0

सी # के लिए कोई चिंता नहीं - वे बहुत समान हैं, यह एक बोली से थोड़ा अधिक है :) अद्यतन समाधान के लिए धन्यवाद - यह बेकार ढंग से काम करता है। – Basic

0
  ColorAnimation colorChangeAnimation = new ColorAnimation(); 
      colorChangeAnimation.From = VariableColour; 
      colorChangeAnimation.To = BaseColour; 
      colorChangeAnimation.Duration = timeSpan; 

      PropertyPath colorTargetPath = new PropertyPath("(Panel.Background).(SolidColorBrush.Color)"); 
      Storyboard CellBackgroundChangeStory = new Storyboard(); 
      Storyboard.SetTarget(colorChangeAnimation, BackGroundCellGrid); 
      Storyboard.SetTargetProperty(colorChangeAnimation, colorTargetPath); 
      CellBackgroundChangeStory.Children.Add(colorChangeAnimation); 
      CellBackgroundChangeStory.Begin(); 

// VariableColour & BaseColour रंग के वर्ग के हैं, समयावधि TimeSpan की कक्षा है, BackGroundCellGrid ग्रिड के वर्ग है ;

// XAML में SolidColorBrush बनाने और बाध्य करने की आवश्यकता नहीं है; // मज़ेदार है!

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