Sic01/SicUI/Controls/Common/AxisBorder.cs

126 lines
4.4 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));
DoubleAnimationUsingPath animationY = new DoubleAnimationUsingPath();
animationY.PathGeometry = path1.Data.GetFlattenedPathGeometry();
animationY.Source = PathAnimationSource.Y;
animationY.Duration = animationX.Duration;
Storyboard storyboard = new Storyboard();
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();
}
}
}