代码之家  ›  专栏  ›  技术社区  ›  oltman

children.add(item)值不在预期范围内

  •  11
  • oltman  · 技术社区  · 15 年前

    我正在开发一个Silverlight3应用程序,当我试图向画布中添加一个对象时,会遇到一个非常奇怪的错误。我的代码如下:

    for (int i = 0; i < person.Children.Count; i++)
    {
        //Add children in same position as parent
        Person child = person.Children[i];
        child.x_PositionTransform.X = person.x_PositionTransform.X;
        child.x_PositionTransform.Y = person.x_PositionTransform.Y;
        child.Click += new RoutedEventHandler(person_Click);
        x_LayoutRoot.Children.Add(child);
    }
    

    我第一次使用它时,它会按预期工作。但是,当我单击使用此代码创建的Person对象后,单击x摼layoutRoot.children.add(child)时,会收到一个ArgumentException,告诉我“值不在预期范围内”。

    但是,当我在将child添加到x_LayoutRoot.children之前添加以下代码时,问题就消失了。

    child.SetValue(Canvas.NameProperty, "child" + objCount++);
    

    为什么会这样?这是一个Silverlight bug,还是(更可能)我只是缺少了什么?

    2 回复  |  直到 10 年前
        1
  •  24
  •   oltman    15 年前

    我想我已经找到了原因:我添加了多个同名的Person对象。因此,如果将来有人遇到这个问题,请确保所有对象都有唯一的名称!

        2
  •  1
  •   abatishchev Karl Johan    14 年前
    Person child = person.Children[i];
    child.x_PositionTransform.X = person.x_PositionTransform.X;
    child.x_PositionTransform.Y = person.x_PositionTransform.Y;
    child.Click += new RoutedEventHandler(person_Click);           
    
    child.SetValue(Canvas.NameProperty, "child" + objCount++); //!
    
    x_LayoutRoot.Children.Add(child);
    

    你可以添加不同的 NameProperty 添加子项之前