2011-03-22 38 views
2

我在我的應用程序中使用一個網格,它包含一些包含一些圖像或文本塊的畫布元素。使用LINQ獲取網格 - >畫布中的所有圖像元素?

例如爲:

<Grid> 
    <Canvas> 
    <Image /> 
    <Image /> 
    </Canvas> 
    <Canvas> 
    <Textblock /> 
    <Textblock /> 
    </Canvas> 
</Grid> 

現在我需要得到電網中的所有圖像元素。 目前我使用幾個foreach循環和if語句來實現這一點。但是我問自己,如果沒有更好的方法使用LINQ,那麼從網格中獲取所有圖像元素。但不幸的是,我的LINQ知識不是那麼好,所以我沒有找到一種方法來獲取畫布元素的子項。

也許有人對此有一個很好的解決方案。

在此先感謝和親切的問候

Kornelis

回答

1

我添加了一個名稱到網格中的鏈接

<Grid Name="MyGrid"> 

引用那麼這個LINQ返回是兒童帆布內的圖像網格。我將它作爲一個對象進行投射,以便它可以查詢Children集合中的每個控件。

IEnumerable<Image> results = (from c in MyGrid.Children.Cast<Object>() 
           where c.GetType() == typeof(Canvas) 
           select c).Cast<Canvas>()  
    .SelectMany(r => r.Children.Cast<object>() 
    .Where(c => c.GetType() == typeof(Image))).Cast<Image>(); 
+0

太好了。非常感謝 :) – Kornelis 2011-03-23 07:02:35