c# - 仅当类型为 T 时才从 Panel 中删除 child

标签 c# .net wpf panel

我有一个 WPF Panel(例如 Canvas),我想删除它的 Children 只有当这些 child 的类型为 T,例如所有 Button 类型。

我该怎么做?我可以使用 LINQ 吗?

最佳答案

您可以使用 LINQ,这是一种方法。

canvas1.Children.OfType<Button>().ToList().ForEach(b => canvas1.Children.Remove(b));

或者您可以遍历所有子元素,如果是按钮,则将它们添加到列表中,最后删除它们。不要删除 foreach 循环内的按钮。

List<Button> toRemove = new List<Button>();
foreach (var o in canvas1.Children)
{
    if (o is Button)
        toRemove.Add((Button)o);
}
for (int i = 0; i < toRemove.Count; i++)
{
    canvas1.Children.Remove(toRemove[i]);
}

LINQ 方式更易读,更简单,代码更少。

关于c# - 仅当类型为 T 时才从 Panel 中删除 child ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11161195/

相关文章:

c# - 如何在没有循环的情况下将键数组和值数组连接到字典中?

.net - 走视觉树是不好的做法吗?

c# - ListBox.ItemsSource 的显示属性

.net - 在任务中显示来自 Catch 语句的自定义弹出窗口

c# - WPF:从不同的 UserControls 访问 ObservableCollection

c# - WiX 3.8 : Two MSI using the same registry values. 如何仅在卸载两个 MSI 的情况下删除注册表值?

c# - 在 mvc View 中循环遍历对象?

.net - 制作 "hotkey"以在 WPF 中聚焦 TextBox

c# - SonarQube 分析 scss/sass 文件?

c# - 为什么 LINQ 查询中的 not null 仍然返回空记录?