繁体   English   中英

如何使用C#通过鼠标移动画一条线

[英]How to draw a line by the mouse move with C#

我想通过鼠标移动在WPF中的画布上画一条线。 从特定的形状开始并按下鼠标左键,我想在鼠标移动的位置精确地画一条线。 为此,我添加了以下三个代码行中详细描述的三个事件处理程序:

private void output_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
    {
        Console.WriteLine(parentCanvas.Name);
        Console.ReadLine();
        isMouseDragging = true;
      /*    rectCanvas.MouseLeftButtonDown -= new MouseButtonEventHandler(Canvas_MouseLeftButtonDown);
        rectCanvas.MouseLeftButtonUp -= new MouseButtonEventHandler(Canvas_MouseLeftButtonUp);
        rectCanvas.MouseMove -= new MouseEventHandler(Canvas_MouseMove);  */

->       parentCanvas.MouseMove += new MouseEventHandler(output_MouseMove);


    }


  private void output_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
    {
        isMouseDragging = false;

    }

    private void output_MouseMove(object sender, MouseEventArgs e)
    {
        if (isMouseDragging && e.LeftButton == MouseButtonState.Pressed)
        {
            connection_Line = new Polyline();
            connection_Line.Stroke = System.Windows.Media.Brushes.SlateGray;
            connection_Line.StrokeThickness = 2;
            connection_Line.FillRule = FillRule.EvenOdd;
   ->       var point = e.GetPosition();
            PointCollection myPointCollection = new PointCollection();
            myPointCollection.Add(point);
            connection_Line.Points = myPointCollection;
            parentCanvas.Children.Add(connection_Line);


        }
    }

1)第一个问题是在最后一个方法中包含的方法e.GetPosition()中添加什么作为参数,以便始终使鼠标位于当前点。

2)其次是在父画布上添加事件处理程序来处理鼠标移动(在output_MouseLeftButtonDown中)是否合理,还是应该以其他方式添加它(不在parentCanvas上)?

3)最后,如果希望整个功能正常运行,还是有更好的方法通过鼠标移动画线?

我已经实现了一条与您几乎相似的线条。 唯一的区别是,我的行是在xaml视图中定义的,并且是从画布派生的特殊用户控件的一部分。 对您的问题:

1.)getPosition中的参数是InputElement,它与您要查找的位置有关。 在您的父画布上进行绘制时,请使用此功能。

2.)如上所述,父画布是您的根元素,因此最好将mouseHandler附加到parentCanvas MouseMove

3.)每次鼠标移动时,我都不会创建新行。 宁可使用Line(或您的情况下的Polyline)作为私有成员,也可以使用XAML中定义的成员,然后通过Data Property更改其Geometry。 例如

<Path x:Name="path" Stroke="Black" StrokeThickness="2" Data="{Binding PathGeometry}">

高温超导

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM