C# 如何用C语言通过鼠标移动画线#

C# 如何用C语言通过鼠标移动画线#,c#,wpf,mouseevent,C#,Wpf,Mouseevent,我想通过鼠标移动在wpf中的画布上画一条线。从一个特定的形状开始,按下鼠标左键,我想在鼠标移动的地方画一条精确的线。为此,我添加了三个事件处理程序,详细描述见以下代码行: private void output_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) { Console.WriteLine(parentCanvas.Name); Console.ReadLine();

我想通过鼠标移动在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) 第二个问题是,在parentcanvas上添加事件处理程序来处理鼠标移动是否合理(在output_MouseLeftButtonDown中),或者是否应该以不同的方式添加事件处理程序(而不是在parentcanvas上)


3) 最后,如果希望整个功能正常工作,或者有更好的方法通过鼠标移动来画一条线吗

我实现了一条与你画的线几乎相似的线。唯一的区别是我的行是在xaml视图中定义的,并且是从画布派生的特殊usercontrol的一部分。 关于你的问题:

1.)getPosition中的参数是与要查找的位置相关的InputElement。当绘图在父画布上进行时,请使用此选项

2.)如上所述,父画布是您的根元素,因此最好将鼠标手柄连接到父画布鼠标移动

3.)我不会每次鼠标移动时都创建新行。而是使用一条线(或多段线)作为私有成员,或者使用XAML中定义的一条线,只需通过数据属性更改其几何图形即可。 e、 g



HTH

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

1.)getPosition中的参数是与要查找的位置相关的InputElement。当绘图在父画布上进行时,请使用此选项

2.)如上所述,父画布是您的根元素,因此最好将鼠标手柄连接到父画布鼠标移动

3.)我不会每次鼠标移动时都创建新行。而是使用一条线(或多段线)作为私有成员,或者使用XAML中定义的一条线,只需通过数据属性更改其几何图形即可。 e、 g



好了,伙计们,第一部分的答案可能是:var point=new point(Mouse.GetPosition(parentCanvas).X,Mouse.GetPosition(parentCanvas.Y)第二部分有什么提示吗?我应该在哪里分配MouseMove事件处理程序?好了,伙计们,第一部分的答案可能是:var point=new point(Mouse.GetPosition(parentCanvas).X,Mouse.GetPosition(parentCanvas.Y)第二部分有什么提示吗?我应该在哪里分配MouseMove事件处理程序?
<Path x:Name="path" Stroke="Black" StrokeThickness="2" Data="{Binding PathGeometry}">