Pertanyaan Silverlight: Nilai tidak termasuk dalam kisaran pengecualian yang diharapkan


Saya mendapatkan "Nilai tidak termasuk dalam kisaran pengecualian yang diharapkan" saat menambahkan anak-anak menumpuk panel. Ini terjadi bahkan ketika myStackPanel.Children.Count = 0 sebelum menambahkan ke stackpanel. Ada yang tahu kenapa?

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 () dipanggil beberapa kali. Saya membaca bahwa kesalahan terjadi ketika kami mencoba menambahkan anak-anak dengan nama yang sama. Tapi dalam kasus saya, saya membersihkan panel stack dan kesalahan terjadi bahkan jika loop foreach berjalan hanya sekali per panggilan ke fungsi ()


6
2018-05-20 03:16


asal


Jawaban:


Kesalahan ini dapat disebabkan ketika ada dua elemen yang ditambahkan dengan nama yang sama. Dalam kasus Anda, apakah ada nilai lDoc.Name duplikat? Jika demikian, Anda dapat menambahkan pengenal unik tambahan. Sebagai contoh:

int id = 0; //outside foreach loop

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

9
2018-05-20 03:23



Periksa kembali jejak stack. Kadang-kadang nomor baris tidak aktif tetapi ada kemungkinan bahwa pengecualian terjadi di setter untuk properti Name. Itu harus mengikuti aturan normal untuk identifier.


0
2018-05-20 03:23



Menurut saya, apa yang sebenarnya Anda inginkan adalah sebuah ItemsControl, Anda tidak benar-benar menggunakan kemampuan 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>

lalu Anda func menjadi:-

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

0
2018-05-20 07:53



Saya telah menemukan bahwa kesalahan ini sering terjadi ketika Anda menetapkan properti Nama dari kontrol ke nama yang sama dari kontrol yang ada di Anak-anak. Dugaan saya adalah bahwa ada Nama duplikat dalam koleksi Dokumen. Itu tidak selalu salah, tetapi kadang-kadang tanpa penjelasan.


0
2018-04-13 04:47