如何访问行和列中的元素

时间:2013-09-01 10:49:32

标签: 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)
            {
                if ((Grid.GetRow(child) == row) && (Grid.GetColumn(child) == column))
                {

                      fr = child;
                }
                else
                {

                      fr = null;
                }
            }

            return fr;

        }  //getchildren

1 个答案:

答案 0 :(得分:1)

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

假设网格包含两个元素。第一个是你要搜索的那个。

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

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

  3. foreach循环已完成枚举元素,并返回fr,为空。

  4. 基本上,只有当元素是网格的最后一个子节点时,您的代码才会起作用。

    要修复算法,请在找到控件时使用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);