■ 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>
----------------------------------------------------------------------------------------------------