3

我有一个椭圆(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'的查询模式的实现。找不到'Where'。考虑明确指定范围变量'c'的类型。”

如何canvas按标签删除孩子?

4

2 回答 2

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

请注意,如果FrameworkElement集合中存在 non (的另一个派生UIElement),则此代码可能会出现运行时错误。为了防止这种情况,您最好使用该OfType方法

var child = (from c in canvas1.Children.OfType<FrameworkElement>()
             where "p".Equals(c.Tag)
             select c).First();
canvas1.Children.Remove(child);
于 2012-05-29T19:29:16.163 回答
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);
于 2012-05-29T19:28:59.013 回答