如何删除wpf中除一个选项卡项外的所有选项卡项

本文关键字:选项 一个 删除 何删除 wpf | 更新日期: 2023-09-27 18:05:58

当我点击注销按钮时,我想删除所有选项卡项我的代码如下

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

但是这会产生以下错误

error-Collection被修改;不能执行枚举操作。

是否存在其他方法?

如何删除wpf中除一个选项卡项外的所有选项卡项

您可以获得所需的项,然后清除控件并将该项添加回去。

// 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);

不能在foreach循环中编辑IEnumerables。使用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);
   }
}

您可以使用LINQ来删除这样的项-

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

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

不允许在Foreach中编辑Enumerable

您可以使用下面的LINQ代码,删除除"welcomeTabItem"之外的所有项:

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

使用以下代码:

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);
}

在枚举集合时不能从集合中删除项