2016-01-22 8 views
12

यदि माउस Button से अधिक है तो मैं Button के Background को एनिमेट करना चाहता हूं।उपयोगकर्ता नियंत्रण एनीमेट बटन की पृष्ठभूमि

Button के Background एक कस्टम निर्भरता संपत्ति मैं अपने UserControl

... Background="{Binding BGColor, Elementname="QButton"}" 

अब के पीछे कोड में बनाया है के लिए बाध्य है अगर मैं

<Trigger Property="IsMouseOver" Value="True"> 
    <Trigger.EnterActions> 
     <BeginStoryboard> 
      <Storyboard> 
       <ColorAnimation To="LightBlue" 
           Duration="0:0:2" 
           Storyboard.TargetProperty="Background.Color"/> 
      </Storyboard> 
     </BeginStoryboard> 
    </Trigger.EnterActions> 
</Trigger> 
का उपयोग करके बटन की पृष्ठभूमि चेतन करने की कोशिश

मैं एक अपवाद मिलेगा जिसमें बताया गया:

नहीं एनिमा कर सकते हैं एक अपरिवर्तनीय संपत्ति (या इसी तरह)।

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

+0

ये [http://blogs.msdn.com/b/mikehillberg/archive/2006/09/26/cannotanimateimmutableobjectinstance.aspx](http://blogs.msdn.com/b/mikehillberg/archive /2006/09/26/cannotanimateimmutableobjectinstance.aspx) मदद कर सकता है [http://stackoverflow.com/questions/14383214/wpf-storyboard-in-style-returning-a-cannot-animate-color-on-an-immutable- obj] (http://stackoverflow.com/questions/14383214/wpf-storyboard-in-style-returning-a-cannot-animate-color-on-an-immutable-obj) – spaceplane

उत्तर

3

माइक Hillberg के महान लेख के आधार पर के बारे में Cannot animate '...' on an immutable object instance:

समाधान के लिए, आप Button के लिए ब्रश की एक प्रतिलिपि बनाने के लिए बाध्य अद्यतन कर सकते हैं। यह बाध्यकारी में हस्तक्षेप नहीं करता है - विंडो के अग्रभूमि में कोई भी परिवर्तन अभी भी Button पर प्रचारित किया जाएगा - लेकिन Button स्थानीय एनीमेशन के लिए अपनी प्रति बना देगा।

तो तुम्हारा के लिए पूर्ण समाधान इस तरह होना चाहिए:

<Window x:Class="WpfApplication2.Window3" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:local="clr-namespace:WpfApplication1" 
    .... 
    .... 

Background="{Binding BGColor, Converter={x:Static local:MyCloneConverter.Instance}}" 

कौन सा के लिए एक IValueConverter संदर्भित कर रहा है बाध्यकारी है कि इस तरह दिखता है:

class MyCloneConverter : IValueConverter 
{ 
    public static MyCloneConverter Instance = new MyCloneConverter(); 

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     if (value is Freezable) 
     { 
      value = (value as Freezable).Clone(); 
     } 
     return value; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     throw new NotSupportedException(); 
    } 
} 
0

बदलें डी पी (bgcolor) खुद को पृष्ठभूमि बदलने के लिए।

<Button.Triggers> 
    <EventTrigger RoutedEvent="MouseEnter"> 
     <BeginStoryboard> 
      <Storyboard> 
       <ColorAnimation To="Red" 
         Duration="0:0:2" 
         Storyboard.TargetName="QButton" 
         Storyboard.TargetProperty="(BGColor).(SolidColorBrush.Color)"/> 
      </Storyboard> 
     </BeginStoryboard> 
    </EventTrigger> 
</Button.Triggers> 
संबंधित मुद्दे