按标签删除Canvas Child

Ion*_*zău 3 c# wpf controls

我有一个椭圆(prew),我想通过标签("p")从canvas(canvas1)中删除.我试过这个,但它不起作用:

var child = (from c in canvas1.Children
             where "p".Equals(c.Tag)
             select c).First();
canvas1.Children.Remove(child);
Run Code Online (Sandbox Code Playgroud)

它给了我这个错误:

"找不到源类型'System.Windows.Controls.UIElementCollection’.'如果’未找到查询模式的实现.考虑显式指定范围变量'C’的类型."

如何canvas通过标签删除孩子?

Jar*_*Par 9

这些UIElementCollection实现IEnumerable是旧的,因此默认情况下与LINQ不兼容.IEnumerable<T>在查询之前,您需要将其转换为强类型

var child = (from c in canvas1.Children.Cast<FrameworkElement>()
             where "p".Equals(c.Tag)
             select c).First();
canvas1.Children.Remove(child);
Run Code Online (Sandbox Code Playgroud)

请注意,如果FrameworkElement集合中存在非代码,则此代码对于运行时错误是可疑的(另一个派生UIElement).为了防止这种情况,你可能最好去那个OfType方法

var child = (from c in canvas1.Children.OfType<FrameworkElement>()
             where "p".Equals(c.Tag)
             select c).First();
canvas1.Children.Remove(child);
Run Code Online (Sandbox Code Playgroud)