WPF

2012-07-23 5 views
5

में रंग संक्रमण मैं एक WPF विंडो के Background रंग का रंग परिवर्तन करना चाहता हूं।WPF

मैं यह कैसे कर सकता हूं?

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

Brush i_color = Brushes.Red; //this is the initial color 
Brush f_color = Brushes.Blue; //this is the final color 

जब मैं Button Button1

private void button1_Click(object sender, RoutedEventArgs e) 
{ 
    this.Background = f_color; //here the transition begins. I don't want to be quick. Maybe an interval of 4 seconds. 
} 
+0

@downvoter क्यों है? –

+4

+1 पर टिप्पणी करने के लिए स्वतंत्र महसूस करें मुझे यह नहीं पता कि यह नीचे क्यों मतदान किया गया है। प्रश्न स्पष्ट है और कुछ कोड यह दिखाता है कि ओपी क्या चाहता है। –

+1

@ जॉन: डाउनवोट शायद स्वयं को समस्या को हल करने के लिए प्रदर्शित प्रयासों की कमी के लिए था (नीचे तीर टूलटिप देखें)। मुझे भी यकीन है कि इससे पहले पूछा गया है ताकि खोज प्रयास पर भी सवाल उठाया जा सके। –

उत्तर

13

कोड में यह इस

private void button1_Click(object sender, RoutedEventArgs e) 
{ 
    ColorAnimation ca = new ColorAnimation(Colors.Red, Colors.Blue, new Duration(TimeSpan.FromSeconds(4))); 
    Storyboard.SetTarget(ca, this); 
    Storyboard.SetTargetProperty(ca, new PropertyPath("Background.Color")); 

    Storyboard stb = new Storyboard(); 
    stb.Children.Add(ca); 
    stb.Begin(); 
} 

साथ किया जा सकता H.B. के रूप में यह इंगित करता है कि यह भी काम करेगा

private void button1_Click(object sender, RoutedEventArgs e) 
{ 
    ColorAnimation ca = new ColorAnimation(Colors.Blue, new Duration(TimeSpan.FromSeconds(4))); 
    this.Background = new SolidColorBrush(Colors.Red); 
    this.Background.BeginAnimation(SolidColorBrush.ColorProperty, ca); 
} 
+1

एक एनीमेशन के लिए स्टोरीबोर्ड होने के कारण थोड़ा सा अनावश्यक है, आप बस ['BeginAnimation'] (http://msdn.microsoft.com/en-us/library/system.windows.uielement.beginanimation.aspx) का उपयोग कर सकते हैं । –

+1

@ एचबी। 'यह। बैकग्राउंड.बिजिनएनीमेशन (सॉलिडकोलर ब्रश। कोलोरप्रोपर्टी, सीए);' अपवाद फेंकता है * 'सिस्टम' विंडों पर 'रंग' संपत्ति को एनिमेट नहीं कर सकता है। ऑब्जेक्ट सीलबंद या जमे हुए *। यदि आप जानते हैं कि इसे कैसे हल करें, तो कृपया अपना ज्ञान साझा करें। – LPL

+2

@ एलपीएल: आपको केवल 'सॉलिडकॉलर ब्रश' के जमे हुए उदाहरण का उपयोग करने के लिए * नहीं * सुनिश्चित करना होगा, उदा। 'पृष्ठभूमि' को 'नया सॉलिडकॉलर ब्रश (रंग। रेड)' पर सेट करें, फिर उसे एनिमेट करें। 'ब्रश' के उदाहरण शायद सभी जमे हुए हैं ताकि उन्हें बदला नहीं जा सके (जो अजीब होगा, किसी को 'ब्रश.रेड' लेते हुए कल्पना करें और अब यह नीला है)। –

5

यहाँ एक तरीका है:

<Window x:Class="WpfApplication1.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" Height="350" Width="525"> 

    <Grid x:Name="BackgroundGrid" Background="Red"> 

     <Button HorizontalAlignment="Left" VerticalAlignment="Top"> 
      Transition 
      <Button.Triggers> 
       <EventTrigger RoutedEvent="Button.Click"> 
        <BeginStoryboard> 
         <Storyboard> 
          <ColorAnimation Storyboard.TargetName="BackgroundGrid" From="Red" To="Blue" Duration="0:0:4" Storyboard.TargetProperty="Background" /> 
         </Storyboard> 
        </BeginStoryboard> 
       </EventTrigger> 
      </Button.Triggers> 
     </Button> 
    </Grid> 
</Window> 
+0

कोई सी # कोड नहीं है - यह शुद्ध xaml का उपयोग करें। – RQDQ

+0

क्या आप एनीमेशन को परिभाषित करने के लिए ए # एनीमेशन, या सी # कोड शुरू करना चाहते हैं? – RQDQ

+0

@ जॉन: यह उत्तर वह करता है जो आप पहले से चाहते हैं, यह क्लिक पर रंग बदलता है, ईवेंट हैंडलर और कोड के पीछे कोड की आवश्यकता नहीं है। –

1

बस एलपीएल और एचबी को पूरा करने के लिए। उत्तर ..... मेरे मामले में मुझे एनीमेशन से पहले एक ही रंग में नियंत्रण वापस करने की आवश्यकता थी।

यहाँ मेरी कोड

ColorAnimation animation = new ColorAnimation() 
{ 
    From = Colors.Orange, 
    To = ((SolidColorBrush)myControl.Background).Color,//Revert to initial control Color 
    Duration = new Duration(TimeSpan.FromSeconds(2)) 
}; 

myControl.Background = new SolidColorBrush(Colors.Orange);//Do not use a frozen instance 
myControl.Background.BeginAnimation(SolidColorBrush.ColorProperty, animation); 
+0

'Autoreverse = true' के साथ क्या गलत है? – itsho

+0

मैं तत्काल ऑरेंज रंग चाहता था, फिर "नियंत्रण रंग" पर वापस लुप्त हो गया। Autoreverse ऑरेंज में "नियंत्रण रंग" से फीका करने के लिए फिर "रंग नियंत्रण" पर फीका होगा। – Guish

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

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