C# 如何使用动画绘制直线?

C# 如何使用动画绘制直线?,c#,animation,storyboard,line,universal,C#,Animation,Storyboard,Line,Universal,我想在C#Universal应用程序背后的代码中画一条线。我尝试使用Line类,但线条确实显示了,但我不知道如何制作动画,使线条看起来像是在屏幕中绘制的,而不是弹出,或者不是将其从屏幕外部转移到位置。我想看看动画画线从A点到B点。你知道我怎样才能做到这一点吗?谢谢 如果有人能举个例子,我将不胜感激 我曾尝试遵循此co,但未成功您可以这样尝试: 简要说明: 有两点p1和p2。你可以把它们放在任何你喜欢的地方 持续时间是动画将花费的毫秒 步长是指绘制新线的毫秒数 计时器“tmr”执行动画工作

我想在C#Universal应用程序背后的代码中画一条线。我尝试使用Line类,但线条确实显示了,但我不知道如何制作动画,使线条看起来像是在屏幕中绘制的,而不是弹出,或者不是将其从屏幕外部转移到位置。我想看看动画画线从A点到B点。你知道我怎样才能做到这一点吗?谢谢
如果有人能举个例子,我将不胜感激

我曾尝试遵循此co,但未成功

您可以这样尝试:

简要说明:

  • 有两点p1和p2。你可以把它们放在任何你喜欢的地方
  • 持续时间是动画将花费的毫秒
  • 步长是指绘制新线的毫秒数
  • 计时器“tmr”执行动画工作
我们需要计算每一步的宽度、线的角度“k”及其偏移量“d”。然后我们开始计时。每个“勾号”都将执行相同的操作:

  • 增加步进计数器

  • 沿直线计算新端点

  • 划清界限

    在最后一步中,使用p1到p2的不同颜色绘制线条

这是一个表单的代码

using System;
using System.Drawing;
using System.Windows.Forms;

namespace TestSO {

    public partial class Form1 : Form {
        public Form1() { }

        PointF p1 = new PointF(10, 10);
        PointF p2 = new PointF(170, 30);

        float durationMS = 5000;
        float stepMS = 100;

        float stepWidthX;
        float k;
        float d;

        private Timer tmr = new Timer();

        protected override void OnLoad(EventArgs e) {
            base.OnLoad(e);

            stepWidthX = (p2.X-p1.X)/ (durationMS / stepMS);

            k = (p2.Y - p1.Y) / (p2.X - p1.X);
            d = (p2.X * p1.Y - p1.X * p2.Y) / (p2.X - p1.X);
            
            tmr.Tick += tmr_Tick;
            tmr.Interval = (int)stepMS;
            tmr.Start();
        }

        private int stepCounter = 0;
        void tmr_Tick(object sender, EventArgs e) {
            stepCounter++;

            float x = p1.X + stepCounter * stepWidthX;
            float y = k * x + d;
            this.CreateGraphics().DrawLine(Pens.Black, p1, new PointF(x, y));


            if(stepCounter * stepMS > durationMS){
                stepCounter = 0;
                tmr.Stop();
                this.CreateGraphics().DrawLine(Pens.Red, p1, p2);
            }
        }

    }
}

@ĐầuTo,因为你是新来的,所以,请注意,这里给出答案的专业人士渴望获得声誉积分。如果你能投票选出有帮助的答案,那将是非常感谢的。如果一个答案帮助你解决了你的问题,你应该把它标记为被接受的答案,这将向其他人表明,这个问题已经解决了。谢谢!哦,对不起,你的帮助真的很有用。我试着投你的票。但是,因为我的声望低于15岁,所以我的选票没有显示出来。@Đầ乌托,没问题,请稍后再来,当你有足够的声望点数。如果这个答案解决了你的问题,你可能想接受它(投票柜台下面的支票)。这对我有好处(代表点),对其他人也有好处,正如他们所看到的,这个问题已经解决了。谢谢