2013-12-22 55 views
1

我有一个ListBox,我添加了不同数量的StackPanel s,但是我需要这些项目以相反的顺序出现在ListBoxListBox.Items.Reverse()似乎不工作?

我已经尝试使用:

listBox.Items.Insert(0, stackPanel); 

然而,这似乎增加1 StackPanelListBox时候才起作用。当我添加更多的时候,我得到的错误是invalid parameter

所以我使出:

listBox.Items.Add(stackPanel); 
listBox.Items.Reverse(); 

但是使用.Reverse();似乎并没有扭转ListBox的顺序?

我也尝试将StackPanels添加到List<StackPanel> list = new List<StackPanel>()并使用list.Reverse();但是,这似乎并没有扭转项目?

有谁知道为什么这些物品不会倒转?

回答

2

Reverse方法实际上是一个来自Linq的扩展方法。它实际上并不修改原始集合,但会以相反顺序返回一组代表原始集合的新项目。

你说的没错,你可以在时间Insert添加只有一个项目,但在一次添加多个项目只需通过多次调用它:

listBox.Items.Insert(0, stackPanel1); 
listBox.Items.Insert(0, stackPanel2); // inserts stackPanel2 before stackPanel1 
listBox.Items.Insert(0, stackPanel3); // inserts stackPanel3 before stackPanel2 

或者如果可能的话,只需添加它们以相反的顺序:

listBox.Items.Add(stackPanel3); 
listBox.Items.Add(stackPanel2); 
listBox.Items.Add(stackPanel1); 

您也可以尝试扭转的项目你将他们加入后,像这样:

for (int i = 0; i < listBox.Items.Count/2; i++) 
{ 
    var tmp = listBox.Items[i]; 
    listBox.Items[i] = listBox.Items[listBox.Items.Count - i - 1]; 
    listBox.Items[listBox.Items.Count - i - 1] = tmp; 
} 
+0

唯一的麻烦是每个stackPanel都是由于IsolatedStorage中的一个目录和文件而生成的,所以我不知道它们中会有多少个。我使用foreach()语句来检索信息并应用于添加到listBox的stackPanel。 – user2696648

+0

只是为了澄清'listBox.Items.Insert(0,stackPanel)'的问题并不是它一次不能添加超过1个项目,但是如果我多次使用该命令,它会引发一个错误这是上面提到的 – user2696648

+0

@ user2696648当你试图添加第二个stackPanel时,它是否是一个新实例?你究竟如何尝试“一次添加多于一件”?这个电话是什么样的? –