mirror of
https://gitee.com/akwkevin/aistudio.-wpf.-diagram
synced 2026-03-20 00:16:36 +08:00
支持动画使用不同的形状
This commit is contained in:
@@ -42,7 +42,7 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
if (this.DataContext is ConnectionViewModel connector && connector.AnimationViewModel != null)
|
||||
{
|
||||
connector.AnimationViewModel.PropertyChanged -= Connector_PropertyChanged;
|
||||
connector.AnimationViewModel.PropertyChanged += Connector_PropertyChanged;
|
||||
connector.AnimationViewModel.PropertyChanged += Connector_PropertyChanged;
|
||||
}
|
||||
this.ball.Visibility = Visibility.Collapsed;
|
||||
await DoAnimation();
|
||||
@@ -56,6 +56,11 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
case nameof(AnimationViewModel.Duration):
|
||||
await DoAnimation();
|
||||
break;
|
||||
case nameof(AnimationViewModel.Start):
|
||||
await Application.Current.Dispatcher.BeginInvoke(async () => {
|
||||
await DoAnimation();
|
||||
});
|
||||
break;
|
||||
|
||||
}
|
||||
}
|
||||
@@ -64,26 +69,36 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
{
|
||||
if (this.DataContext is ConnectionViewModel connector && connector.IsFullConnection)
|
||||
{
|
||||
await System.Threading.Tasks.Task.Delay(100);
|
||||
if (connector.AnimationViewModel.Repeat == false)
|
||||
{
|
||||
if (connector.AnimationViewModel.Start == false || connector.AnimationViewModel.Completed == 1)
|
||||
{
|
||||
return;
|
||||
}
|
||||
connector.AnimationViewModel.Completed = 1;
|
||||
connector.AnimationViewModel.Start = false;
|
||||
}
|
||||
|
||||
await System.Threading.Tasks.Task.Delay(10);
|
||||
switch (connector.AnimationViewModel.Animation)
|
||||
{
|
||||
case LineAnimation.None:
|
||||
_story?.Stop(this);
|
||||
ball.Visibility = Visibility.Collapsed;
|
||||
case LineAnimation.None:
|
||||
_story?.Stop(this);
|
||||
ball.Visibility = Visibility.Collapsed;
|
||||
break;
|
||||
case LineAnimation.PathAnimation:
|
||||
if (connector.ColorViewModel.FillColor.BrushType == BrushType.SolidColorBrush && connector.ColorViewModel.FillColor.Color == Colors.White)
|
||||
{
|
||||
connector.ColorViewModel.FillColor.Color = Colors.Red;
|
||||
}
|
||||
PathAnimation(connector.AnimationViewModel.Duration);
|
||||
PathAnimation(connector.AnimationViewModel);
|
||||
break;
|
||||
case LineAnimation.DashAnimation:
|
||||
if (connector.ColorViewModel.LineDashStyle == LineDashStyle.None)
|
||||
{
|
||||
connector.ColorViewModel.LineDashStyle = LineDashStyle.Dash1;
|
||||
}
|
||||
DashAnimation(connector.AnimationViewModel.Duration);
|
||||
DashAnimation(connector.AnimationViewModel);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -91,14 +106,14 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
|
||||
Storyboard _story;
|
||||
|
||||
private void PathAnimation(double second)
|
||||
private void PathAnimation(IAnimationViewModel animationViewModel)
|
||||
{
|
||||
this.ball.Visibility = Visibility.Visible;
|
||||
|
||||
Canvas.SetTop(this.ball, -this.ball.ActualHeight / 2);
|
||||
Canvas.SetLeft(this.ball, -this.ball.ActualWidth / 2);
|
||||
|
||||
this.ball.RenderTransformOrigin = new Point(0.5, 0.5);
|
||||
this.ball.RenderTransformOrigin = new Point(0.5, 0.5);
|
||||
|
||||
TranslateTransform translate = new TranslateTransform();
|
||||
RotateTransform rotate = new RotateTransform();
|
||||
@@ -114,7 +129,7 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
DoubleAnimationUsingPath animationX = new DoubleAnimationUsingPath();
|
||||
animationX.PathGeometry = this.line.Data?.GetFlattenedPathGeometry();
|
||||
animationX.Source = PathAnimationSource.X;
|
||||
animationX.Duration = new Duration(TimeSpan.FromSeconds(second));
|
||||
animationX.Duration = new Duration(TimeSpan.FromSeconds(animationViewModel.Duration));
|
||||
|
||||
DoubleAnimationUsingPath animationY = new DoubleAnimationUsingPath();
|
||||
animationY.PathGeometry = this.line.Data?.GetFlattenedPathGeometry();
|
||||
@@ -134,7 +149,15 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
_story.Children.Add(animationY);
|
||||
_story.Children.Add(animationAngle);
|
||||
_story.Completed += (s, d) => {
|
||||
_story.Begin(this, true);
|
||||
if (animationViewModel.Repeat)
|
||||
{
|
||||
_story.Begin(this, true);
|
||||
}
|
||||
else
|
||||
{
|
||||
this.ball.Visibility = Visibility.Collapsed;
|
||||
animationViewModel.Completed = 100;
|
||||
}
|
||||
};
|
||||
Storyboard.SetTargetName(animationX, "translate");
|
||||
Storyboard.SetTargetName(animationY, "translate");
|
||||
@@ -147,12 +170,12 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
|
||||
}
|
||||
|
||||
private void DashAnimation(double second)
|
||||
private void DashAnimation(IAnimationViewModel animationViewModel)
|
||||
{
|
||||
this.ball.Visibility = Visibility.Collapsed;
|
||||
|
||||
|
||||
var animation = new DoubleAnimation(0, -10, new Duration(TimeSpan.FromSeconds(second)))
|
||||
var animation = new DoubleAnimation(0, -10, new Duration(TimeSpan.FromSeconds(animationViewModel.Duration)))
|
||||
{
|
||||
RepeatBehavior = RepeatBehavior.Forever,
|
||||
};
|
||||
@@ -163,6 +186,17 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
_story = new Storyboard();
|
||||
_story.RepeatBehavior = RepeatBehavior.Forever;
|
||||
_story.Children.Add(animation);
|
||||
_story.Completed += (s, d) => {
|
||||
if (animationViewModel.Repeat)
|
||||
{
|
||||
_story.Begin(this, true);
|
||||
}
|
||||
else
|
||||
{
|
||||
this.ball.Visibility = Visibility.Collapsed;
|
||||
animationViewModel.Completed = 100;
|
||||
}
|
||||
};
|
||||
_story.Begin(this, true);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user