我想访问包含列和行的网格内的所有元素。
我对找到的方法进行了编辑,但它始终返回 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
,为null。
基本上,您的代码仅在元素是网格的最后一个子元素时才有效。
要修复算法,请在找到控件时使用 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);
关于c# - 如何访问行和列中的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18557657/