使用LINQ获取Grid-> Canvas中的所有图像元素?

时间:2011-03-22 20:11:40

标签: linq image canvas grid

我在我的应用程序中使用了一个网格,其中包含一些包含一些图像或文本块的画布元素。

例如:

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

现在我需要获取网格中的所有图像元素。 目前我正在使用几个foreach循环和if语句来实现这个目标。但我问自己是否使用LINQ没有更优雅的方式,所以从网格中获取所有图像元素。但不幸的是,我的LINQ Knowledges并不是那么好,所以我没有找到一种方法来获得画布元素之子。

也许某人有一个很好的解决方案。

提前致谢并致以亲切的问候

Kornelis

1 个答案:

答案 0 :(得分: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>();