129 lines
4.5 KiB
C#
129 lines
4.5 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using System.Windows;
|
|
using System.Windows.Controls;
|
|
using System.Windows.Media;
|
|
using System.Windows.Media.Animation;
|
|
using System.Windows.Shapes;
|
|
|
|
namespace SicUI.Controls.Common
|
|
{
|
|
public class AxisBorder:Border
|
|
{
|
|
private Storyboard currentStoryboard;
|
|
|
|
public void Stop()
|
|
{
|
|
if (currentStoryboard != null)
|
|
{
|
|
currentStoryboard.Stop(this);
|
|
currentStoryboard = null;
|
|
}
|
|
}
|
|
|
|
public void MoveToUp(bool isUp, double times, Action onComplete = null)
|
|
{
|
|
Storyboard storyboard = new Storyboard(); //创建Storyboard对象
|
|
|
|
int desYPoint = 0;
|
|
int orgYPoint = 0;
|
|
if (isUp)
|
|
{
|
|
orgYPoint = 0;
|
|
desYPoint = -10;
|
|
}
|
|
else
|
|
{
|
|
orgYPoint = -10;
|
|
desYPoint = 0;
|
|
}
|
|
|
|
DoubleAnimation doubleAnimation = new DoubleAnimation(orgYPoint, desYPoint, new Duration(TimeSpan.FromMilliseconds(times)));
|
|
Storyboard.SetTarget(doubleAnimation, this);
|
|
Storyboard.SetTargetProperty(doubleAnimation, new PropertyPath("(Canvas.Top)"));
|
|
storyboard.Children.Add(doubleAnimation);
|
|
storyboard.Completed += (s, e) =>
|
|
{
|
|
InvalidateVisual();
|
|
currentStoryboard = null;
|
|
onComplete?.Invoke();
|
|
};
|
|
|
|
currentStoryboard = storyboard;
|
|
storyboard.Begin();
|
|
}
|
|
|
|
public void MoveToEnd(bool frontToEnd, int times, Action onComplete = null)
|
|
{
|
|
Path path1 = new Path();
|
|
|
|
if (frontToEnd)
|
|
{
|
|
path1.Data = Geometry.Parse("M 0,0 A 300,160 0 0 0 -250,13");
|
|
}
|
|
else
|
|
{
|
|
path1.Data = Geometry.Parse("M -250,13 A 300,160 0 0 1 0,0");
|
|
}
|
|
|
|
TranslateTransform translate = new TranslateTransform();
|
|
this.RenderTransform = translate;
|
|
|
|
NameScope.SetNameScope(this, new NameScope());
|
|
this.RegisterName("translate", translate);
|
|
|
|
DoubleAnimationUsingPath animationX = new DoubleAnimationUsingPath();
|
|
animationX.PathGeometry = path1.Data.GetFlattenedPathGeometry();
|
|
animationX.Source = PathAnimationSource.X;
|
|
animationX.Duration = new Duration(TimeSpan.FromMilliseconds(times));
|
|
animationX.FillBehavior = FillBehavior.HoldEnd;
|
|
|
|
DoubleAnimationUsingPath animationY = new DoubleAnimationUsingPath();
|
|
animationY.PathGeometry = path1.Data.GetFlattenedPathGeometry();
|
|
animationY.Source = PathAnimationSource.Y;
|
|
animationY.Duration = animationX.Duration;
|
|
animationY.FillBehavior = FillBehavior.HoldEnd;
|
|
|
|
Storyboard storyboard = new Storyboard();
|
|
storyboard.AutoReverse = false;
|
|
storyboard.Children.Add(animationX);
|
|
storyboard.Children.Add(animationY);
|
|
Storyboard.SetTargetName(animationX, "translate");
|
|
Storyboard.SetTargetName(animationY, "translate");
|
|
Storyboard.SetTargetProperty(animationX, new PropertyPath(TranslateTransform.XProperty));
|
|
Storyboard.SetTargetProperty(animationY, new PropertyPath(TranslateTransform.YProperty));
|
|
storyboard.Completed += (s, e) =>
|
|
{
|
|
InvalidateVisual();
|
|
currentStoryboard = null;
|
|
onComplete?.Invoke();
|
|
};
|
|
|
|
currentStoryboard = storyboard;
|
|
storyboard.Begin(this);
|
|
}
|
|
|
|
public void MoveToUpDown(bool toUp,int orgYPoint, int desYPoint, double times, Action onComplete = null)
|
|
{
|
|
Storyboard storyboard = new Storyboard(); //创建Storyboard对象
|
|
|
|
DoubleAnimation doubleAnimation = new DoubleAnimation(orgYPoint, desYPoint, new Duration(TimeSpan.FromMilliseconds(times)));
|
|
Storyboard.SetTarget(doubleAnimation, this);
|
|
Storyboard.SetTargetProperty(doubleAnimation, new PropertyPath("(Canvas.Top)"));
|
|
storyboard.Children.Add(doubleAnimation);
|
|
storyboard.Completed += (s, e) =>
|
|
{
|
|
InvalidateVisual();
|
|
currentStoryboard = null;
|
|
onComplete?.Invoke();
|
|
};
|
|
|
|
currentStoryboard = storyboard;
|
|
storyboard.Begin();
|
|
}
|
|
}
|
|
}
|