2010-02-25 3 views
6

Ho un oggetto MyGrid.Children UIElementCollection, vorrei trovare tutti i rettangoli in esso che hanno gli stili impostati su StyleA e impostare loro a StyleB.Data UIElementCollection, trovare tutti gli elementi che hanno StyleA e cambiarli in StyleB in WPF

Mi piacerebbe utilizzare LINQ se possibile, in modo da evitare un brutto ciclo annidato.

Qualcosa di simile a questo pseudocodice:

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

poi:

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

Può un guru LINQ aiutarmi a migliorare il mio LINQ-fu?

risposta

15

Il codice era quasi corretto, ma UIElements non hanno una proprietà di stile ... È possibile filtrare i bambini della griglia in base al loro tipo:

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

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