【问题标题】:Trying to implement Polyline in WPF C# but throws 'Specified Visual is already a child' error尝试在 WPF C# 中实现折线但抛出“指定的视觉对象已经是孩子”错误
【发布时间】: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...谢谢

标签: c# wpf canvas polyline


【解决方案1】:

正如克莱门斯在 cmets 中回答的那样,上面:

错误信息很清楚。 polyLine 已经是 MainCanvas 的孩子。你不能添加它两次。如果您已经添加过一次,请不要再拨打Add(polyLine)。或者在再次添加之前将其删除。或者创建一条新的折线。

这解决了这个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多