Значение Children.Add(item) не входит в ожидаемый диапазон

Я разрабатываю приложение Silverlight 3 и получаю эту действительно странную ошибку, когда пытаюсь добавить объект к холсту. Мой код выглядит следующим образом:

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);
}

В первый раз, когда я использую это, он работает так, как ожидалось. Однако, когда я нажал x_LayoutRoot.Children.Add(дочерний элемент) после нажатия объекта Person, который был создан с использованием этого кода, я получаю исключение ArgumentException, говорящее мне, что "Значение не попадает в ожидаемый диапазон".

Однако, когда я добавляю следующий код перед добавлением дочернего элемента в x_LayoutRoot.Children, проблема исчезает.

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

Почему это происходит? Является ли это ошибкой Silverlight или (скорее), я просто что-то пропустил?

Ответ 1

Я думаю, что я выяснил причину этого: я добавлял несколько объектов Person с тем же именем. Итак, если у кого-то есть эта проблема в будущем, убедитесь, что все ваши объекты имеют уникальные имена!

Ответ 2

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 перед добавлением дочернего