2012-05-29 98 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);