Wpf animate background color

前端 未结 8 2045
生来不讨喜
生来不讨喜 2020-11-30 02:41

I need help in taking right decision. I need to animate a background color of my user control when some event happens. When it is, I want to change the background just for 1

相关标签:
8条回答
  • 2020-11-30 03:39

    This worked well for me.

    I have a path inside a button (it draws an "X"):

    <Path x:Name="MyDeleteRowButton" Stroke="Gray" Grid.Row="0" 
          Data="M1,5 L11,15 M1,15 L11,5" StrokeThickness="2" HorizontalAlignment="Center" 
          Stretch="None"/>
    

    On mouse over, I want the cross to go red, so I add:

    <DataTemplate.Triggers>
        <!-- Highlight row on mouse over, and highlight the delete button. -->
        <EventTrigger RoutedEvent="ItemsControl.MouseEnter">
            <EventTrigger.Actions>
                <BeginStoryboard>
                    <Storyboard>
                        <!-- On mouse over, flicker the row to highlight it.-->
                        <DoubleAnimation
                            Storyboard.TargetProperty="Opacity"
                            From="0.5" 
                            To="1" 
                            Duration="0:0:0.250"  
                            FillBehavior="Stop"/>
                        <!-- Highlight the delete button with red. -->
                        <ColorAnimation
                            To="Red"
                            Storyboard.TargetName="MyDeleteRowButton"
                            Storyboard.TargetProperty="(Stroke).(SolidColorBrush.Color)"
                            Duration="0:0:0.100" 
                            FillBehavior="HoldEnd"/>
                    </Storyboard>
                </BeginStoryboard>
            </EventTrigger.Actions>
        </EventTrigger>
    
        <!-- Grey out the delete button. -->
        <EventTrigger RoutedEvent="ItemsControl.MouseLeave">
            <EventTrigger.Actions>
                <BeginStoryboard>
                    <Storyboard>
                        <!-- Space is precious: "delete" button appears only on a mouseover. -->
                        <ColorAnimation
                            To="Gray"
                            Storyboard.TargetName="MyDeleteRowButton"
                            Storyboard.TargetProperty="(Stroke).(SolidColorBrush.Color)"
                            Duration="0:0:0.100" 
                            FillBehavior="HoldEnd"/>
                    </Storyboard>
                </BeginStoryboard>
            </EventTrigger.Actions>
        </EventTrigger>
    
    </DataTemplate.Triggers>
    

    The most confusing thing about this is the brackets within Storyboard.TargetProperty. If you remove the brackets, nothing works.

    For more information, see "propertyName Grammar" and "Storyboard.TargetProperty".

    0 讨论(0)
  • 2020-11-30 03:42
            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 are class of Color, timeSpan is Class of TimeSpan, BackGroundCellGrid is class of Grid;

    //no need to create SolidColorBrush and binding to it in XAML; //have fun!

    0 讨论(0)
提交回复
热议问题