按标签删除Canvas Child

时间:2012-05-29 19:20:01

标签: 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);

它给了我这个错误:

  

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

如何按标记移除canvas子项?

2 个答案:

答案 0 :(得分: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);

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

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

答案 1 :(得分:2)

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