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

man*_*ril 2 .net c# wpf wpf-controls

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

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

但这会产生以下错误

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

是否存在其他任何方法?

Jas*_*ins 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);
Run Code Online (Sandbox Code Playgroud)

或者,如果"WelcomeTabItem"可能不在Items:

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


Hos*_*Rad 5

你不能IEnumerablesforeach循环中编辑.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);
   }
}
Run Code Online (Sandbox Code Playgroud)