첨부 실행 코드는 나눔고딕코딩 폰트를 사용합니다.
728x90
반응형
728x170

■ GradientStop 클래스의 Color/Offset 속성에 대한 애니메이션을 만드는 방법을 보여준다.

TestProject.zip
0.01MB

▶ MainWindow.xaml

<Window x:Class="TestProject.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Width="800"
    Height="600"
    Title="TestProject"
    FontFamily="나눔고딕코딩"
    FontSize="16">
</Window>

 

▶ MainWindow.xaml.cs

using System;
using System.Windows;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;

namespace TestProject
{
    /// <summary>
    /// 메인 윈도우
    /// </summary>
    public partial class MainWindow : Window
    {
        //////////////////////////////////////////////////////////////////////////////////////////////////// Constructor
        ////////////////////////////////////////////////////////////////////////////////////////// Public

        #region 생성자 - MainWindow()

        /// <summary>
        /// 생성자
        /// </summary>
        public MainWindow()
        {
            NameScope.SetNameScope(this, new NameScope());

            GradientStop gradientStop1 = new GradientStop(Colors.MediumBlue, 0.0);
            GradientStop gradientStop2 = new GradientStop(Colors.Purple    , 0.5);
            GradientStop gradientStop3 = new GradientStop(Colors.Red       , 1.0);

            LinearGradientBrush linearGradientBrush = new LinearGradientBrush();

            linearGradientBrush.GradientStops.Add(gradientStop1);
            linearGradientBrush.GradientStops.Add(gradientStop2);
            linearGradientBrush.GradientStops.Add(gradientStop3);

            RegisterName("gradientStop1", gradientStop1);
            RegisterName("gradientStop2", gradientStop2);
            RegisterName("gradientStop3", gradientStop3);

            Rectangle rectangle = new Rectangle();

            rectangle.Width           = 200;
            rectangle.Height          = 100;
            rectangle.StrokeThickness = 1;
            rectangle.Stroke          = Brushes.Black;
            rectangle.Fill            = linearGradientBrush;

            DoubleAnimation offsetDoubleAnimation = new DoubleAnimation();

            offsetDoubleAnimation.Duration    = TimeSpan.FromSeconds(1.5);
            offsetDoubleAnimation.From        = 0.0;
            offsetDoubleAnimation.To          = 1.0;
            offsetDoubleAnimation.AutoReverse = true;

            Storyboard.SetTargetName(offsetDoubleAnimation, "gradientStop1");
            Storyboard.SetTargetProperty(offsetDoubleAnimation, new PropertyPath(GradientStop.OffsetProperty));

            ColorAnimation gradientStopColorAnimation = new ColorAnimation();

            gradientStopColorAnimation.Duration    = TimeSpan.FromSeconds(1.5);
            gradientStopColorAnimation.BeginTime   = TimeSpan.FromSeconds(3);
            gradientStopColorAnimation.From        = Colors.Purple;
            gradientStopColorAnimation.To          = Colors.Yellow;
            gradientStopColorAnimation.AutoReverse = true;

            Storyboard.SetTargetName(gradientStopColorAnimation, "gradientStop2");
            Storyboard.SetTargetProperty(gradientStopColorAnimation, new PropertyPath(GradientStop.ColorProperty));

            ColorAnimation opacityColorAnimation = new ColorAnimation();

            opacityColorAnimation.Duration    = TimeSpan.FromSeconds(1.5);
            opacityColorAnimation.BeginTime   = TimeSpan.FromSeconds(6);
            opacityColorAnimation.By          = Color.FromScRgb(-1.0f, 0f, 0f, 0f);
            opacityColorAnimation.AutoReverse = true;

            Storyboard.SetTargetName(opacityColorAnimation, "gradientStop3");
            Storyboard.SetTargetProperty(opacityColorAnimation, new PropertyPath(GradientStop.ColorProperty));

            Storyboard gradientStopAnimationStoryboard = new Storyboard();

            gradientStopAnimationStoryboard.Children.Add(offsetDoubleAnimation     );
            gradientStopAnimationStoryboard.Children.Add(gradientStopColorAnimation);
            gradientStopAnimationStoryboard.Children.Add(opacityColorAnimation     );

            rectangle.MouseLeftButtonDown += delegate(object sender, MouseButtonEventArgs e)
            {
                gradientStopAnimationStoryboard.Begin(this);
            };

            Content = rectangle;
        }

        #endregion
    }
}
728x90
반응형
그리드형(광고전용)
Posted by icodebroker

댓글을 달아 주세요