按标签删除画布子项

本文关键字:标签 删除 | 更新日期: 2023-09-27 18:35:43

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

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

它给了我这个错误:

"找不到源类型的查询模式的实现 'System.Windows.Controls.UIElementCollection'. "哪里"找不到。 考虑显式指定范围变量 'c' 的类型。

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

按标签删除画布子项

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);

请注意,如果集合中存在非FrameworkElementUIElement 的另一个派生),则此代码可能因运行时错误而可疑。 为了防止这种情况,您最好使用OfType方法

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

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