如何删除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被修改;不能执行枚举操作。
是否存在其他方法?
您可以获得所需的项,然后清除控件并将该项添加回去。
// 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);
}
在枚举集合时不能从集合中删除项