如何:对 SolidColorBrush 的颜色或不透明度进行动画处理

本示例演示如何对 SolidColorBrushColorOpacity 进行动画处理。

示例

下面的示例使用三个动画对 SolidColorBrushColorOpacity 进行动画处理。

  • 当鼠标进入矩形时,第一个动画(一个 ColorAnimation)会将画笔的颜色改为 Gray

  • 当鼠标离开矩形时,第二个动画(另一个 ColorAnimation)会将画笔的颜色改为 Orange

  • 在按下鼠标左键时,最后一个动画(一个 DoubleAnimation)会将画笔的不透明度改为 0.0。


Imports Microsoft.VisualBasic
Imports System
Imports System.Windows
Imports System.Windows.Controls
Imports System.Windows.Media
Imports System.Windows.Media.Animation
Imports System.Windows.Shapes
Imports System.Windows.Input

Namespace Microsoft.Samples.Animation
    ''' <summary>
    ''' This example shows how to animate the Opacity and Color 
    ''' properties of a SolidColorBrush.
    ''' </summary>
    Public Class SolidColorBrushExample
        Inherits Page

        Public Sub New()
            Title = "SolidColorBrush Animation Example"
            Background = Brushes.White

            ' Create a NameScope for the page so
            ' that Storyboards can be used.
            NameScope.SetNameScope(Me, New NameScope())

            ' Create a Rectangle.
            Dim aRectangle As New Rectangle()
            aRectangle.Width = 100
            aRectangle.Height = 100

            ' Create a SolidColorBrush to paint
            ' the rectangle's fill. The Opacity
            ' and Color properties of the brush
            ' will be animated.
            Dim myAnimatedBrush As New SolidColorBrush()
            myAnimatedBrush.Color = Colors.Orange
            aRectangle.Fill = myAnimatedBrush

            ' Register the brush's name with the page
            ' so that it can be targeted by storyboards.
            Me.RegisterName("MyAnimatedBrush", myAnimatedBrush)

            '
            ' Animate the brush's color to gray when
            ' the mouse enters the rectangle.
            '
            Dim mouseEnterColorAnimation As New ColorAnimation()
            mouseEnterColorAnimation.To = Colors.Gray
            mouseEnterColorAnimation.Duration = TimeSpan.FromSeconds(1)
            Storyboard.SetTargetName(mouseEnterColorAnimation, "MyAnimatedBrush")
            Storyboard.SetTargetProperty(mouseEnterColorAnimation, New PropertyPath(SolidColorBrush.ColorProperty))
            Dim mouseEnterStoryboard As New Storyboard()
            mouseEnterStoryboard.Children.Add(mouseEnterColorAnimation)
            AddHandler aRectangle.MouseEnter, Sub(sender As Object, e As MouseEventArgs) mouseEnterStoryboard.Begin(Me)

            '
            ' Animate the brush's color to orange when
            ' the mouse leaves the rectangle.
            '
            Dim mouseLeaveColorAnimation As New ColorAnimation()
            mouseLeaveColorAnimation.To = Colors.Orange
            mouseLeaveColorAnimation.Duration = TimeSpan.FromSeconds(1)
            Storyboard.SetTargetName(mouseLeaveColorAnimation, "MyAnimatedBrush")
            Storyboard.SetTargetProperty(mouseLeaveColorAnimation, New PropertyPath(SolidColorBrush.ColorProperty))
            Dim mouseLeaveStoryboard As New Storyboard()
            mouseLeaveStoryboard.Children.Add(mouseLeaveColorAnimation)
            AddHandler aRectangle.MouseLeave, Sub(sender As Object, e As MouseEventArgs) mouseLeaveStoryboard.Begin(Me)

            '
            ' Animate the brush's opacity to 0 and back when
            ' the left mouse button is pressed over the rectangle.
            '
            Dim opacityAnimation As New DoubleAnimation()
            opacityAnimation.To = 0.0
            opacityAnimation.Duration = TimeSpan.FromSeconds(0.5)
            opacityAnimation.AutoReverse = True
            Storyboard.SetTargetName(opacityAnimation, "MyAnimatedBrush")
            Storyboard.SetTargetProperty(opacityAnimation, New PropertyPath(SolidColorBrush.OpacityProperty))
            Dim mouseLeftButtonDownStoryboard As New Storyboard()
            mouseLeftButtonDownStoryboard.Children.Add(opacityAnimation)
            AddHandler aRectangle.MouseLeftButtonDown, Sub(sender As Object, e As MouseButtonEventArgs) mouseLeftButtonDownStoryboard.Begin(Me)

            Dim mainPanel As New StackPanel()
            mainPanel.Margin = New Thickness(20)
            mainPanel.Children.Add(aRectangle)
            Content = mainPanel
        End Sub

    End Class
End Namespace
using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.Windows.Input;

namespace Microsoft.Samples.Animation
{
    /// <summary>
    /// This example shows how to animate the Opacity and Color 
    /// properties of a SolidColorBrush.
    /// </summary>
    public class SolidColorBrushExample : Page
    {

        public SolidColorBrushExample()
        {
            Title = "SolidColorBrush Animation Example";
            Background = Brushes.White;

            // Create a NameScope for the page so
            // that Storyboards can be used.
            NameScope.SetNameScope(this, new NameScope());

            // Create a Rectangle.
            Rectangle aRectangle = new Rectangle();
            aRectangle.Width = 100;
            aRectangle.Height = 100;

            // Create a SolidColorBrush to paint
            // the rectangle's fill. The Opacity
            // and Color properties of the brush
            // will be animated.
            SolidColorBrush myAnimatedBrush = new SolidColorBrush();
            myAnimatedBrush.Color = Colors.Orange;
            aRectangle.Fill = myAnimatedBrush;

            // Register the brush's name with the page
            // so that it can be targeted by storyboards.
            this.RegisterName("MyAnimatedBrush", myAnimatedBrush);

            //
            // Animate the brush's color to gray when
            // the mouse enters the rectangle.
            //
            ColorAnimation mouseEnterColorAnimation = new ColorAnimation();
            mouseEnterColorAnimation.To = Colors.Gray;
            mouseEnterColorAnimation.Duration = TimeSpan.FromSeconds(1);
            Storyboard.SetTargetName(mouseEnterColorAnimation, "MyAnimatedBrush");
            Storyboard.SetTargetProperty(
                mouseEnterColorAnimation, new PropertyPath(SolidColorBrush.ColorProperty));
            Storyboard mouseEnterStoryboard = new Storyboard();
            mouseEnterStoryboard.Children.Add(mouseEnterColorAnimation);
            aRectangle.MouseEnter += delegate(object sender, MouseEventArgs e)
            {
                mouseEnterStoryboard.Begin(this);
            };

            //
            // Animate the brush's color to orange when
            // the mouse leaves the rectangle.
            //
            ColorAnimation mouseLeaveColorAnimation = new ColorAnimation();
            mouseLeaveColorAnimation.To = Colors.Orange;
            mouseLeaveColorAnimation.Duration = TimeSpan.FromSeconds(1);
            Storyboard.SetTargetName(mouseLeaveColorAnimation, "MyAnimatedBrush");
            Storyboard.SetTargetProperty(
                mouseLeaveColorAnimation, new PropertyPath(SolidColorBrush.ColorProperty));
            Storyboard mouseLeaveStoryboard = new Storyboard();
            mouseLeaveStoryboard.Children.Add(mouseLeaveColorAnimation);
            aRectangle.MouseLeave += delegate(object sender, MouseEventArgs e)
            {
                mouseLeaveStoryboard.Begin(this);
            };

            //
            // Animate the brush's opacity to 0 and back when
            // the left mouse button is pressed over the rectangle.
            //
            DoubleAnimation opacityAnimation = new DoubleAnimation();
            opacityAnimation.To = 0.0;
            opacityAnimation.Duration = TimeSpan.FromSeconds(0.5);
            opacityAnimation.AutoReverse = true;
            Storyboard.SetTargetName(opacityAnimation, "MyAnimatedBrush");
            Storyboard.SetTargetProperty(
                opacityAnimation, new PropertyPath(SolidColorBrush.OpacityProperty));
            Storyboard mouseLeftButtonDownStoryboard = new Storyboard();
            mouseLeftButtonDownStoryboard.Children.Add(opacityAnimation);
            aRectangle.MouseLeftButtonDown += delegate(object sender, MouseButtonEventArgs e)
            {
                mouseLeftButtonDownStoryboard.Begin(this);
            };

            StackPanel mainPanel = new StackPanel();
            mainPanel.Margin = new Thickness(20);
            mainPanel.Children.Add(aRectangle);
            Content = mainPanel;
        }

    }
}
<!-- SolidColorBrushExample.xaml
     This example shows how to animate the Opacity and Color 
     properties of a SolidColorBrush.-->
<Page 
  xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation" 
  xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
  Title="SolidColorBrush Animation Example"
  Background="White">
  <StackPanel Margin="20">

    <!-- The Opacity and Color of the SolidColorBrush 
         used to fill this rectangle is animated. -->
    <Rectangle Width="100" Height="100">
      <Rectangle.Fill>
        <SolidColorBrush x:Name="MyAnimatedBrush" Color="Orange" />
      </Rectangle.Fill>
      <Rectangle.Triggers>

        <!-- Animates the brush's color to gray
             When the mouse enters the rectangle. -->
        <EventTrigger RoutedEvent="Rectangle.MouseEnter">
          <BeginStoryboard>
            <Storyboard>
              <ColorAnimation
                Storyboard.TargetName="MyAnimatedBrush"
                Storyboard.TargetProperty="Color"
                To="Gray" Duration="0:0:1" />
            </Storyboard>
          </BeginStoryboard>
        </EventTrigger>

        <!-- Animates the brush's color to orange
             when the mouse leaves the rectangle. -->
        <EventTrigger RoutedEvent="Rectangle.MouseLeave">
          <BeginStoryboard>
            <Storyboard>
              <ColorAnimation
                Storyboard.TargetName="MyAnimatedBrush"
                Storyboard.TargetProperty="Color"
                To="Orange" Duration="0:0:1" />
            </Storyboard>
          </BeginStoryboard>
        </EventTrigger>    

        <!-- Animates the brush's opacity when the
             left mouse button is pressed over the rectangle. -->
        <EventTrigger RoutedEvent="Rectangle.MouseLeftButtonDown">
          <BeginStoryboard>
            <Storyboard>
              <DoubleAnimation
                Storyboard.TargetName="MyAnimatedBrush"
                Storyboard.TargetProperty="Opacity"
                To="0.0" Duration="0:0:0.5" AutoReverse="True" />
            </Storyboard>
          </BeginStoryboard>
        </EventTrigger>        
      </Rectangle.Triggers>
    </Rectangle>
  </StackPanel>
</Page>

有关演示如何对不同类型的画笔进行动画处理的更完整示例,请参见 Brushes Sample(画笔示例)。 有关动画的更多信息,请参见动画概述

为了与其他动画示例保持一致,此示例的代码版本使用 Storyboard 对象来应用它们的动画。 但是,在代码中应用单个动画时,较为简便的操作是使用 BeginAnimation 方法而非使用 Storyboard。 有关示例,请参见如何:在不使用演示图板的情况下对属性进行动画处理

请参见

概念

动画概述

演示图板概述

其他资源

Brushes Sample