2012-05-29 99 views
2

我有一个椭圆(前导),我想通过标记(“p”)从帆布(canvas1)中删除。 我想这一点,但它不工作:通过标记去除帆布子(

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

它给了我这个错误:

"Could not find an implementation of the query pattern for source type 'System.Windows.Controls.UIElementCollection'. 'Where' not found. Consider explicitly specifying the type of the range variable 'c'."

我怎么能按标签删除canvas孩子?

回答

7

UIElementCollection实现普通的旧IEnumerable,因此是不是默认与LINQ兼容。您需要查询

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

注意,这个代码是suspectible运行时错误如果在集合(的UIElement另一个派生)在非FrameworkElement之前将它转换成一个强类型IEnumerable<T>。为了防止这种情况,你可能最好去OfType方法

var child = (from c in canvas1.Children.OfType<FrameworkElement>() 
      where "p".Equals(c.Tag) 
      select c).First(); 
canvas1.Children.Remove(child); 
1
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);