如何识别线上的鼠标?

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

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

谢谢。

这是一个工作示例:(实现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; } 

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

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

看看这个项目: http : //www.codeproject.com/KB/WPF/WPF_DrawTools.aspx

我建议你在canvas上添加一个自定义MouseDown事件处理程序。 实际上,如果你的线很细,你需要让用户能够点击一条线来选择它。

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

对于每一行:

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