2011-10-13 103 views
2

我想使用Path绘制一些线条。运行程序时,它总是显示错误。错误发生在这句话:“myPathSegmentCollection.Add(myLineSegment [i]);” 解决方案可以建立。调试时,显示“元素已经是另一个元素的孩子”在windows phone 7中画线?

下面是我的函数:

public void drawline(Point endP) 
{ 
    PathFigenter code hereure myPathFigure = new PathFigure(); 
    myPathFigure.StartPoint = endP; 

    LineSegment [] myLineSegment = new LineSegment[5]; 
    Point myPoint = new Point(); 
    LineSegment line = new LineSegment(); 
    PathSegmentCollection myPathSegmentCollection = new PathSegmentCollection(); 
    for (int i = 0; i < 5; i++) 
    { 
     myPoint.X = i + 10.0; 
     myPoint.Y = i+1.0; 
     line.Point = myPoint; 
     myLineSegment[i] = line; 
     myPathSegmentCollection.Add(myLineSegment[i]); 
    } 

    myPathFigure.Segments = myPathSegmentCollection; 

    PathFigureCollection myPathFigureCollection = new PathFigureCollection(); 
    myPathFigureCollection.Add(myPathFigure); 

    PathGeometry myPathGeometry = new PathGeometry(); 
    myPathGeometry.Figures = myPathFigureCollection; 

    myPath.StrokeThickness = 1; 
    myPath.Data = myPathGeometry; 
} 

是否有任何人能帮助吗?谢谢!

回答

1

问题是你在循环中重新使用你的LineSegment。这些只能用于单个控件,因此尝试多次添加相同的项目会引发异常。

要修复它建立在循环新LineSegment

for (int i = 0; i < 5; i++) 
{ 
    myLineSegment[i] = new LineSegment() { 
     Point = new Point(i + 10.0, i + 1.0); 
    }; 
    myPathSegmentCollection.Add(myLineSegment[i]); 
} 
+0

是的,没错。非常感谢你。 –

+0

另一个问题。实际上,我已经为函数上面的myLineSegment []指定了内存,例如“LineSegment [] myLineSegment = new LineSegment [5]”,我认为每个元素都有独立的内存。是什么原因? –

+0

@Xiao_ga:'LineSegment [] myLineSegment = new LineSegment [5]'只保留5个指向LineSegment类型的对象的指针,而不是实际的对象本身。 C#数组都是关于单独的对象引用,而不是像C/C++这样的内存数组 –