C# 如何访问行和列中的元素

C# 如何访问行和列中的元素,c#,windows-phone-7,grid,rows,elements,C#,Windows Phone 7,Grid,Rows,Elements,我想访问包含列和行的网格中的所有元素 我对找到的方法进行了编辑,但它总是返回null private static FrameworkElement GetChildren(Grid grid, int row, int column) { FrameworkElement fr = null; foreach (FrameworkElement child in grid.Children) {

我想访问包含列和行的网格中的所有元素

我对找到的方法进行了编辑,但它总是返回null

 private static FrameworkElement GetChildren(Grid grid, int row, int column)
        {
            FrameworkElement fr = null;

            foreach (FrameworkElement child in grid.Children)
            {
                if ((Grid.GetRow(child) == row) && (Grid.GetColumn(child) == column))
                {

                      fr = child;
                }
                else
                {

                      fr = null;
                }
            }

            return fr;

        }  //getchildren

您的方法是正确的,但您的算法是错误的

假设网格包含两个元素。第一个是你正在寻找的

  • foreach
    枚举所有控件,并返回第一个控件。它是正确的行和列,因此您可以将其分配给
    fr

  • foreach的
    将继续并返回第二个。它不是正确的行/列,因此您将
    null
    分配给
    fr

  • foreach
    循环已完成元素枚举,并返回
    fr
    ,该值为空

  • 基本上,只有当元素是网格的最后一个子元素时,代码才会工作

    要修复算法,请在找到控件时使用
    break
    指令退出循环:

    FrameworkElement fr = null;
    
    foreach (FrameworkElement child in grid.Children)
    {
        if ((Grid.GetRow(child) == row) && (Grid.GetColumn(child) == column))
        {
              fr = child;
              break;
        }
    }
    
    return fr;
    
    或者,您可以使用Linq缩短代码:

    return grid.Children
        .OfType<FrameworkElement>()
        .FirstOrDefault(child => Grid.GetRow(child) == row && Grid.GetColumn(child) == column);
    
    返回grid.Children
    第()类
    .FirstOrDefault(child=>Grid.GetRow(child)=行和Grid.GetColumn(child)=列);