【发布时间】:2017-07-22 05:17:56
【问题描述】:
我正在尝试实现Polylinefollowing 这个:WPF Drawing on Canvas with Mouse Events/ 就像在原始查询中一样,我成功地实现了解决方案线绘制,但注意到线条不连贯。下一个解决方案表明使用折线解决了该问题。然而,它抛出了可怕的“指定的视觉已经是一个孩子”的错误。这些是相关的代码 sn-ps:
private void Canvas_MouseDown_1(object sender, MouseButtonEventArgs e)
{
if (e.ButtonState == MouseButtonState.Pressed)
currentPoint = e.GetPosition(MainCanvas);
StartingPoint = currentPoint;
if (ActiveDrawingTool == DRAW_ROADS)
{
polygonPoints = new PointCollection();
polyLine = new Polyline();
}
// 等等...
private void Canvas_MouseMove_1(object sender, System.Windows.Input.MouseEventArgs e)
{
if (e.LeftButton == MouseButtonState.Pressed && ActiveDrawingTool != 0
&& ActiveDrawingTool != DRAW_PLACENAMES)
{
if (ActiveDrawingTool == DRAW_ROADS)
{
polyLine.Stroke = new SolidColorBrush(Colors.Black);
polyLine.StrokeThickness = 8;
Point currentPoint = e.GetPosition(MainCanvas);
polygonPoints.Add(currentPoint);
polyLine.Points = polygonPoints;
MainCanvas.Children.Add(polyLine);
}
将折线添加到 MainCanvas 时会引发错误。奇怪的是,如果我不使用折线,它不会抛出这个错误。我正在尝试使用折线实时绘制连续线。
【问题讨论】:
-
错误信息很清楚。
polyLine已经是MainCanvas的孩子。你不能添加它两次。如果您已经添加过一次,请不要再拨打Add(polyLine)。或者在再次添加之前将其删除。或者创建一条新的折线。 -
好的,但是我想随着鼠标的移动不断地画线。我能想到的唯一调用位置是 Canvas_MouseMove_1。我该如何处理?解决了...将绘图调用放入 Canvas_MouseDown...谢谢