Silverlight:值不在预期范围异常范围内

时间:2011-05-20 03:16:32

标签: c# silverlight

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

void func()
{
          myStackPanel.Children.Clear();        
          List<Docs> 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()只运行一次,也会发生错误

4 个答案:

答案 0 :(得分:9)

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

int id = 0; //outside foreach loop

myTextborder.Name = lDoc.Name + id.ToString();
id++;

答案 1 :(得分:0)

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

答案 2 :(得分:0)

在我看来,你真正想要的是ItemsControl,你并没有真正使用Silverlight的功能: -

<ScrollViewer>
     <ItemsControl x:Name="items">
         <ItemsControl.ItemTemplate>
             <DataTemplate>
                <Border BorderThickness="1">
                   <TextBlock Text="{Binding Name}" />
                   <!-- what ever xaml you require to represent a document -->
                </Border>
             </DataTemplate>
         </ItemsControl.ItemTemplate>
     </ItemsControl>
</ScrollViewer>

然后您的func变为: -

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

答案 3 :(得分:0)

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