【发布时间】:2011-11-15 15:44:38
【问题描述】:
我想通过鼠标移动在 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) 最后,如果整个功能都可以正常工作,或者有没有更好的方法通过鼠标移动来画线?
【问题讨论】:
-
好吧,第一部分的答案可能是: var point = new Point(Mouse.GetPosition(parentCanvas).X, Mouse.GetPosition(parentCanvas).Y) 第二部分有什么提示吗?我应该在哪里分配 MouseMove 事件处理程序?
标签: c# wpf mouseevent