如何删除除wpf之外的所有标签项目?
我要删除所有标签的项目当我点击 我的代码如下如何删除除wpf之外的所有标签项目?
foreach (object item in mainTab.Items)
{
TabItem ti = (TabItem)item;
if ("welcomeTabItem" != ti.Name)
{
mainTab.Items.Remove(item);
}
}
给予注销按钮但是,这将创建下列错误
错误集合被修改;枚举操作可能不会执行。
是否有其他方法存在?
你可以得到所需的项目,然后清除控制,并添加项背。
// 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);
无法编辑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);
}
}
请注意,减少'i'非常重要,因为删除要移位的项目索引,如果从'0'开始并增加'i',会导致您跳过项目。 – 2013-03-27 07:44:39
其作品。感谢您的帮助Hoessein – manuthalasseril 2013-03-27 08:07:04
使用下面的代码:
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);
}
,而你枚举它不能从集合中删除项目
编辑可枚举一个Foreach内是不允许
你可以用下面的LINQ代码,删除所有除“welcomeTabItem”外的项目:
mainTab.Items.RemoveAll(i => i.Name != "welcomeTabItem");
这与提问者想要做的事情相反。 – 2013-03-27 07:50:51
@jacobaloysious:你的解决方案很好,但正如杰森所说,manuthalasseril将除去其中一个标签。 – 2013-03-27 07:56:24
@JasonWatkins:谢谢,更新:) – 2013-03-27 07:56:24
您可以使用LINQ
删除的项目,如本 -
mainTab.Items.RemoveAll(ti => ((TabItem)ti).Name != "welcomeTabItem");
确保你的文件的顶部添加using System.Linq;
命名空间。
这也是一个很好的解决方案。谢谢杰森 – manuthalasseril 2013-03-27 08:11:38
完美的作品谢谢 – 2017-03-16 14:06:19