2010-06-07 8 views
5

मैं कुछ ऐसा करना चाहता हूं जो काफी सरल है, लेकिन मैं यह नहीं समझ सकता कि इसे कैसे किया जाए। मेरे पास ColorAnimation है जो MouseEnter ईवेंट होने पर ट्रिगर होता है। यह बस एक रंग से दूसरे रंग में सीमा के पृष्ठभूमि रंग को बदलता है।मैं एक WPF ColorAnimation में रंग से कैसे जुड़ूं?

दुर्भाग्य से, मैं समझ नहीं कैसे इस ColorAnimation में कुछ भी लेकिन हार्डकोडेड रंग डाल दिया। तो यह इस तरह वर्तमान में दिखता है:

<Style x:Key="MouseOverStyle"> 
<Style.Triggers> 
    <EventTrigger RoutedEvent="Mouse.MouseEnter"> 
     <EventTrigger.Actions> 
      <BeginStoryboard> 
       <Storyboard> 
        <ColorAnimation Duration="0:0:0.5" Storyboard.TargetProperty="(Border.Background).(SolidColorBrush.Color)" 
            To="Red" /> 
       </Storyboard> 
      </BeginStoryboard> 
     </EventTrigger.Actions> 
    </EventTrigger> 
</Style.Triggers> 
</Style> 

हालांकि, इस तरह मैं कुछ करना चाहते हैं या तो:

<SolidColorBrush x:Key="MyEventColor" Color="{Binding EventColor}" /> 

<Style x:Key="MouseOverStyle"> 
<Style.Triggers> 
    <EventTrigger RoutedEvent="Mouse.MouseEnter"> 
     <EventTrigger.Actions> 
      <BeginStoryboard> 
       <Storyboard> 
        <ColorAnimation Duration="0:0:0.5" Storyboard.TargetProperty="(Border.Background).(SolidColorBrush.Color)" 
            To="{StaticResource MyEventColor}" /> 
       </Storyboard> 
      </BeginStoryboard> 
     </EventTrigger.Actions> 
    </EventTrigger> 
</Style.Triggers> 
</Style> 

या इस तरह:

<Style x:Key="MouseOverStyle"> 
<Style.Triggers> 
    <EventTrigger RoutedEvent="Mouse.MouseEnter"> 
     <EventTrigger.Actions> 
      <BeginStoryboard> 
       <Storyboard> 
        <ColorAnimation Duration="0:0:0.5" Storyboard.TargetProperty="(Border.Background).(SolidColorBrush.Color)" 
            To="{Binding EventColor}" /> 
       </Storyboard> 
      </BeginStoryboard> 
     </EventTrigger.Actions> 
    </EventTrigger> 
</Style.Triggers> 
</Style> 

जब मैं या तो करने की कोशिश उनमें से एक अपवाद फेंक दिया जाता है। सबसे पहले, यह मुझे एक अपवाद फेंकता है जो मुझे अनिवार्य रूप से बताता है कि "रंग" संपत्ति सॉलिडकॉलर ब्रश मान नहीं ले सकती ... जो समझ में आता है ... लेकिन यह निश्चित रूप से मेरी मदद नहीं करता है क्योंकि रंगएनीमेशन मुझे नहीं जाने देगा "(सीमा। बैकग्राउंड) को एनिमेट करें। (सॉलिडकोलर ब्रश)" संपत्ति ... यह मुझे केवल "(सीमा। बैकग्राउंड) को एनिमेट करने देगी। (सॉलिडकोलर ब्रश। रंग)" संपत्ति ....

पर अपवाद दूसरा उदाहरण मूल रूप से मुझे बताता है कि "थ्रेड में उपयोग के लिए इस स्टोरीबोर्ड टाइमलाइन पेड़ को फ्रीज नहीं किया जा सकता है" ... तो ऐसा लगता है जैसे ColorAnimation UI थ्रेड या कुछ की तुलना में किसी अन्य थ्रेड में बाध्यकारी करने का प्रयास कर रहा है? जो कुछ भी करने की कोशिश कर रहा है ... यह काम नहीं कर रहा है।

मैं इस तरह के एक सरल कार्य कैसे हो कर सकते हैं?

उत्तर

7

पहले एक के लिए, आप MyColor इस तरह के रूप में परिभाषित किया साथ {StaticResource MyColor} इस्तेमाल कर सकते हैं:

<Color x:Key="MyColor">#FF00FF00</Color> 

बहरहाल, यह आपकी समस्या का समाधान नहीं करता है: आप एनीमेशन गुण के लिए बाध्य नहीं कर सकते हैं के बाद से उन गुणों की जरूरत है काम करने के लिए एनीमेशन के लिए जमे हुए (अपरिवर्तनीय)। या तो बाध्यकारी पर अपनी निर्भरता को हटाने का प्रयास करें, या रंग बदलते समय कोड से सही रंग के साथ स्टोरीबोर्ड को फिर से बनाएं।

+0

दुर्भाग्य से पहले समाधान तभी किसी तरह पीछे कोड में से एक के लिए एक रंग बाध्य करने के लिए था काम करेगा। मैं "माउसइंटर" घटना की एनीमेशन के लिए बाध्यकारी से सुरक्षित रूप से छुटकारा पा सकता हूं ... जिसका अर्थ है कि इस नियंत्रण के हर उदाहरण के लिए, यदि माउस उस पर आच्छादित है, तो नियंत्रण उसी रंग में बदल जाएगा। मुझे नहीं है, तथापि, सुरक्षित रूप से इसी "mouseleave" घटना के एनीमेशन के लिए बाध्यकारी (जो बिल्कुल वैसा ही लग रहा है), क्योंकि इस वस्तु के प्रत्येक उदाहरण के लिए एक अलग पृष्ठभूमि रंग संपत्ति हो सकता था से छुटकारा पा सकते हैं, और जब माउस छोड़ देता है रंग में लौटने की जरूरत है सामान्य। – David

+0

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

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