如何删除除wpf中的一个以外的所有标签项?

时间:2013-03-27 07:39:27

标签: c# .net wpf wpf-controls

我想在点击退出按钮时删除所有标签项 我的代码如下:

foreach (object item  in mainTab.Items)
{
  TabItem ti = (TabItem)item;
  if ("welcomeTabItem" != ti.Name)
    {
      mainTab.Items.Remove(item);
    }
}

但这会产生以下错误

  

错误 - 收集已修改;枚举操作可能无法执行。

是否存在其他任何方法?

5 个答案:

答案 0 :(得分:6)

您可以获得所需的项目,然后清除控件并重新添加该项目。

// Note that `First` will throw an exception if the item isn't found.
TabItem ti = mainTab.Items.First(t => t.Name == "WelcomTabItem");
mainTab.Items.Clear();
mainTab.Items.Add(ti);

或者,如果“WelcomeTabItem”可能不在Items

TabItem ti = mainTab.Items.FirstOrDefault(t => t.Name == "WelcomTabItem");
mainTab.Items.Clear();
if(ti != null)
    mainTab.Items.Add(ti);

答案 1 :(得分:5)

您无法在IEnumerables循环中修改foreach。 insted使用for循环。

for (int i = mainTab.Items.Count -1; i >=0; i--)
{
  TabItem ti = (TabItem)mainTab.Items[i];
  if ("welcomeTabItem" != ti.Name)
   {
     mainTab.Items.Remove(ti);
   }
}

答案 2 :(得分:4)

您可以使用LINQ删除此类内容 -

mainTab.Items.RemoveAll(ti => ((TabItem)ti).Name != "welcomeTabItem");

确保在文件顶部添加using System.Linq;命名空间。

答案 3 :(得分:3)

不允许在Foreach中编辑可枚举

您可以使用以下LINQ代码删除“welcomeTabItem”以外的所有项目:

mainTab.Items.RemoveAll(i => i.Name != "welcomeTabItem");

答案 4 :(得分:1)

使用以下代码:

var itemsToRemove = new List(TabItem);

foreach (object item  in mainTab.Items)
{
  TabItem ti = (TabItem)item;
  if ("welcomeTabItem" != ti.Name)
   {
     itemsToRemove.Add(item);
   }
}

foreach (var itemToRemove in itemsToRemove)
{
    mainTab.Items.Remove(itemToRemove);
}

在枚举时,您无法从集合中删除项目