2011-05-20 11 views
6

Me sale "El valor no está dentro de la excepción del rango esperado" al agregar niños al panel de apilamiento. Esto sucede incluso cuando myStackPanel.Children.Count = 0 justo antes de agregar a stackpanel. ¿Alguna idea de por qué?Silverlight: el valor no está dentro del rango esperado de excepción

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() se llama varias veces. Leí que el error ocurre cuando intentamos agregar niños con el mismo nombre. Pero en mi caso, estoy borrando el panel de pila y el error ocurre incluso si el bucle foreach se ejecuta solo una vez por llamada al func()

+0

¿Qué pasa si se comenta la línea 'myTextborder.Name'? – Gabe

+0

Además, el código que reemplazó con "..." en su ejemplo probablemente sea relevante. – Josh

+0

El error no ocurre si lo comento. Pero para cada llamada de func estoy limpiando el stackpanel. Por qué pasó esto. Puede haber un duplicado de myTextBorder.Name de una llamada a func() anterior, no la actual. ¿Cómo importa eso cuando lo borro cada vez? – Tsu

Respuesta

9

Este error puede deberse cuando se agregan dos elementos con el mismo nombre . En su caso, ¿hay algún valor lDoc.Name duplicado? De ser así, podría agregar un identificador único adicional. Por ejemplo:

int id = 0; //outside foreach loop 

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

Revise dos veces el seguimiento de la pila. A veces, el número de línea está desactivado, pero es posible que se esté produciendo la excepción en el establecimiento de la propiedad Nombre. Debe seguir las reglas normales para un identificador.

0

Me parece que lo que realmente quiere es un ItemsControl, usted no está realmente utilizando las capacidades de 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> 

entonces su func se convierte en: -

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

he encontrado que este error suele ocurrir cuando establece la propiedad Nombre de un control con el mismo nombre de un control existente en los Niños. Supongo que hay nombres duplicados en la colección de documentos. No siempre es un error, pero a veces sin explicación.

Cuestiones relacionadas