2

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

我对找到的方法进行了编辑,但它总是返回 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
4

1 回答 1

1

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

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

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

  2. foreach继续并返回第二个。它不是正确的行/列,因此您分配nullfr.

  3. 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);
于 2013-09-01T10:57:04.113 回答