Silverlight:值不在预期范围exception范围内

将子项添加到堆栈面板时,我得到“值不在预期的范围exception范围内”。 即使在添加到stackpanel之前myStackPanel.Children.Count = 0时也会发生这种情况。 知道为什么吗?

void func() { myStackPanel.Children.Clear(); List lDocs = docDictionary[ID]; foreach (Docs lDoc in lDocs) { ... Border myTextborder = new Border(); myTextborder.BorderThickness = new Thickness(1); myTextborder.Name = lDoc.Name; ... myStackPanel.Children.Add(myTextborder); //Getting Value does not fall within the expected range exception here } } 

func()被多次调用。 我读到当我们尝试添加具有相同名称的子项时发生错误。 但在我的情况下,我正在清除堆栈面板,即使foreach循环每次调用func()只运行一次,也会发生错误

当添加两个具有相同名称的元素时,可能会导致此错误。 在您的情况下,是否有任何重复的lDoc.Name值? 如果是这样,您可以添加额外的唯一标识符。 例如:

 int id = 0; //outside foreach loop myTextborder.Name = lDoc.Name + id.ToString(); id++; 

仔细检查堆栈跟踪。 有时行号已关闭,但可能是在Name属性的setter中发生exception。 它必须遵循标识符的常规规则。

在我看来,你真正想要的是一个ItemsControl ,你并没有真正使用Silverlight的function: –

             

然后你的func变成: –

 public void func() { items.ItemsSource = docDictionary[ID]; } 

我发现当您将控件的Name属性设置为Children中现有控件的相同名称时,通常会发生此错误。 我的猜测是Docs集合中有重复的Name。 它并不总是错误,但它有时没有解释。