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

发布于 2024-10-25 22:02:06 字数 473 浏览 1 评论 0原文

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

例如:

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

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

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

预先感谢并亲切问候

科内利斯

i'm using a Grid within my Application which Contain some Canvas Elements which Contain some Images or Textblocks.

e.g.:

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

Now i need to get all Image Elements within the Grid.
Currently i'm using several foreach loops and if-statements to achive this. But i was asking myself if there isn't a more elegant way using LINQ so fetch all Image Elements from the Grid. But unfortunely my LINQ Knowledges aren't that well so i didn't found a way to get the to the Children of the Canvas Element.

Maybe someone has a good Solution to this.

Thanks in advance and kind regards

Kornelis

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

倥絔 2024-11-01 22:02:06

我向网格添加了一个名称以在链接中引用

<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>();

I added a Name to the Grid to reference in the link

<Grid Name="MyGrid">

Then this linq returns Images inside of canvases that are children of the Grid. I cast it as an object so that it could query every control that was in the Children collection.

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>();
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文