【问题标题】:How to draw a circle on Canvas?如何在 Canvas 上画一个圆圈?
【发布时间】:2015-10-10 09:12:55
【问题描述】:

我是 WPF 的新手,正在做 MyPaint 应用程序。 当我在画布上画一个圆或一个正方形时,当​​我沿着 Oy 轴移动鼠标时,它们会跟随我的鼠标。 我不知道如何解决这个问题。 这里是。 感谢阅读。

Point p1, p2;
        Point currClick;
        //int i = 0;
        //private bool flag = true;
        Rectangle Myline;

        SolidColorBrush scb = new SolidColorBrush(Colors.Black);
private void MyCanvas_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            p1 = e.GetPosition(MyCanvas);
            Myline = new Rectangle();

            Myline.Stroke = scb;
            Myline.StrokeThickness = 1;
            DoubleCollection Mydash = new DoubleCollection { 5, 3 };
            Myline.StrokeDashArray = Mydash;
            Canvas.SetLeft(Myline, p1.X);
            Canvas.SetTop(Myline, p1.Y);
            //Myline.Fill = scb;


            MyCanvas.Children.Add(Myline);

        }
private void MyCanvas_MouseMove_1(object sender, System.Windows.Input.MouseEventArgs e)
{
            if (e.LeftButton == MouseButtonState.Released)
            {
                return;
            }
else
            {
                Myline.Width = Math.Max(p2.X, p1.X) - Math.Min(p2.X, p1.X);
                Myline.Height = Myline.Width;
                Canvas.SetLeft(Myline, Math.Min(p1.X, p2.X));
                Canvas.SetTop(Myline, Math.Min(p1.Y, p2.Y));
            }
        }

【问题讨论】:

  • 您在哪里创建和设置 Myline、p1 和 p2?
  • 请参阅this answer,了解如何在画布中绘制形状。
  • 谢谢两位,我试试看
  • if (e.LeftButton == MouseButtonState.Released)之前添加p2 = e.GetPosition(MyCanvas);
  • @mitli 它也不起作用。我意识到当 p2.Y >= p1.Y 时,形状会跟随鼠标。

标签: c# wpf


【解决方案1】:

像这样改变鼠标移动事件:

 private void MyCanvas_MouseMove_1(object sender, System.Windows.Input.MouseEventArgs e)
    {
        p2 = e.GetPosition(MyCanvas);
        if (e.LeftButton == MouseButtonState.Pressed)
        {
            if (p1.X < p2.X)
                Canvas.SetLeft(Myline, p1.X);  else Canvas.SetLeft(Myline, p2.X);
            if (p1.Y < p2.Y)
                Canvas.SetTop(Myline, p1.Y);  else Canvas.SetTop(Myline, p2.Y);

            Myline.Width = Math.Max(p2.X, p1.X) - Math.Min(p2.X, p1.X);
            Myline.Height = Math.Max(p2.Y, p1.Y) - Math.Min(p2.Y, p1.Y);
       }
    }

【讨论】:

  • 感谢您的帮助!我编辑了
猜你喜欢
  • 2012-11-12
  • 1970-01-01
  • 1970-01-01
  • 2010-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-25
  • 1970-01-01
相关资源
最近更新 更多