如何识别线上的鼠标?

时间:2011-09-26 14:17:27

标签: c# wpf mouseevent

我有一个WPF应用程序。有一块帆布。当用户将鼠标拖到画布上时(从鼠标向下鼠标向上),我画线。我用初始点,当用户按下鼠标时最后一点,当用户按下鼠标时。然后我计算距离并用简单的鼠标向下,移动和向上事件画线。

在画布上画出很多行后,我点击任意一行。我想选择该行并向用户显示该行被选中(例如通过更改该行的颜色)。所以用户可以删除它。

感谢。

3 个答案:

答案 0 :(得分:4)

这是一个有效的例子:(实施Bala在评论中提出的建议)

private void myCanvas_Loaded(object sender, RoutedEventArgs e)
        {
            Line line = new Line();

            line.MouseDown += new MouseButtonEventHandler(line_MouseDown);
            line.MouseUp   += new MouseButtonEventHandler(line_MouseUp);

            line.Stroke = Brushes.Black;
            line.StrokeThickness = 2;
            line.X1 = 30; line.X2 = 80;
            line.Y1 = 30; line.Y2 = 30;

            myCanvas.Children.Add(line);
        }

void line_MouseUp(object sender, MouseButtonEventArgs e)
        {
            // Change line colour back to normal 
            ((Line)sender).Stroke = Brushes.Black;
        }

void line_MouseDown(object sender, MouseButtonEventArgs e)
        {
            // Change line Colour to something
            ((Line)sender).Stroke = Brushes.Red;
        }

考虑到你已经有了将线条添加到画布中的逻辑,

只需为您添加的每一行添加两个事件处理程序(如上所述)。

答案 1 :(得分:0)

答案 2 :(得分:0)

我建议您在画布中添加自定义MouseDown事件处理程序。实际上,如果您的线条非常薄,您需要让用户能够在一条线附近点击以选择它。

为此,在您的自定义MouseDown处理程序中,遍历您的行并执行以下操作:

对于每一行:

  • 创建一个矩形,其长度为width,height = max(lineWidth,10px),
  • 围绕矩形中心旋转鼠标坐标,角度等于线角度(用math.atan2计算),
  • 检查新鼠标坐标是否位于矩形内
  • 如果是,请选择当前留置权并中断。