■ EasingFunctionBase 클래스를 사용해 커스텀 Easing 함수를 정의하는 방법을 보여준다.

 

 

CustomEasingFunction.cs

----------------------------------------------------------------------------------------------------

using System;

using System.Windows;

using System.Windows.Media.Animation;

 

namespace TestProject

{

    /// <summary>

    /// 커스텀 이징 함수

    /// </summary>

    public class CustomEasingFunction : EasingFunctionBase

    {

        //////////////////////////////////////////////////////////////////////////////////////////////////// Constructor

        ////////////////////////////////////////////////////////////////////////////////////////// Public

 

        #region 생성자 - CustomEasingFunction()

 

        /// <summary>

        /// 생성자

        /// </summary>

        public CustomEasingFunction() : base()

        {

        }

 

        #endregion

 

        //////////////////////////////////////////////////////////////////////////////////////////////////// Method

        ////////////////////////////////////////////////////////////////////////////////////////// Protected

 

        #region 이징 인 처리하기 (코어) - EaseInCore(normalizedTime)

 

        /// <summary>

        /// 이징 인 처리하기 (코어)

        /// </summary>

        /// <param name="normalizedTime">정규화 시간</param>

        /// <returns>처리 결과</returns>

        protected override double EaseInCore(double normalizedTime)

        {

            return Math.Pow(normalizedTime, 7);

        }

 

        #endregion

        #region 인스턴스 생성하기 (코어) - CreateInstanceCore()

 

        /// <summary>

        /// 인스턴스 생성하기 (코어)

        /// </summary>

        /// <returns>생성 인스턴스</returns>

        protected override Freezable CreateInstanceCore()

        {

            return new CustomEasingFunction();

        }

 

        #endregion

    }

}

----------------------------------------------------------------------------------------------------

 

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"

    xmlns:local="clr-namespace:TestProject"

    Width="800"

    Height="600"

    Title="TestProject"

    FontFamily="나눔고딕코딩"

    FontSize="16">

    <Border

        Width="400"

        Height="400"

        Background="LightGray">

        <Rectangle Name="rectangle"

            Width="200"

            Height="30"

            Fill="Blue">

            <Rectangle.Triggers>

                <EventTrigger RoutedEvent="Rectangle.MouseDown">

                    <BeginStoryboard>

                        <Storyboard>

                            <DoubleAnimation

                                Storyboard.TargetName="rectangle"

                                Storyboard.TargetProperty="Height"

                                Duration="00:00:03"

                                From="30"

                                To="200">

                                <DoubleAnimation.EasingFunction>

                                    <local:CustomEasingFunction EasingMode="EaseIn" />

                                </DoubleAnimation.EasingFunction>

                            </DoubleAnimation>

                        </Storyboard>

                    </BeginStoryboard>

                </EventTrigger>

            </Rectangle.Triggers>

        </Rectangle>

    </Border>

</Window>

----------------------------------------------------------------------------------------------------