2010-02-25 2 views
6

У меня есть MyGrid.Children UIElementCollection, я бы хотел найти все прямоугольники в нем, у которых есть стили, установленные в StyleA, и установить их в StyleB.Учитывая UIElementCollection, найдите все элементы, имеющие StyleA, и измените их на StyleB в WPF

Я бы хотел использовать LINQ, если это возможно, поэтому я могу избежать неприятного вложенного цикла.

Что-то вроде этого псевдокода:

var Recs = from r in MyGrid.Children 
        where r.Style == StyleA && r.GetType() == typeof(Rectangle) 
        select r as Rectangle; 

затем:

foreach(Rectangle r in Recs) 
    r.Style = StyleB; 

Может гуру LINQ помочь мне улучшить мой LINQ-фу?

ответ

15

Ваш кода был почти правильно, но UIElements не имеет свойства Style ... Вы можете отфильтровать ребенок сетки, основанный на их тип:

var recs = from r in MyGrid.Children.OfType<Rectangle>() 
      where r.Style == StyleA 
      select r; 

foreach(Rectangle r in recs) 
    r.Style = StyleB;