我有一个ListBox
我正在添加不同数量的StackPanel
,但我需要这些项目在ListBox
中以相反的顺序显示。
我尝试过使用:
listBox.Items.Insert(0, stackPanel);
但是,这似乎仅在向StackPanel
添加1 ListBox
时才有效。当我添加多个时,我收到的错误是invalid parameter
。
所以我采取了:
listBox.Items.Add(stackPanel);
listBox.Items.Reverse();
但是,使用.Reverse();
似乎不会颠倒ListBox
的顺序?
我还尝试将StackPanels
添加到List<StackPanel> list = new List<StackPanel>()
并使用了list.Reverse();
,但这似乎也没有撤消项目?
有谁知道为什么这些物品不会倒转?
答案 0 :(得分: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;
}