如何按列和行号选择网格中的子节点

时间:2014-03-26 09:35:17

标签: c# wpf grid

如何通过其位置(行和列)找到ui元素?

2 个答案:

答案 0 :(得分:1)

UIElement FindByCell1(Grid g, int row, int col)
{
    var childs = g.Children.Cast<UIElement>()
    return childs.Where(x => Grid.GetRow(x) == row && Grid.GetColumn(x) == col).FirstOrDefault();
}

如果同一个单元格中可能存在某些元素:

IEnumerable<UIElement> FindByCell(Grid g, int row, int col)
{
    var childs = g.Children.Cast<UIElement>()
    return childs.Where(x => Grid.GetRow(x) == row && Grid.GetColumn(x) == col);
}

在你的情况下,这种方式 - 直接使用UI中的元素 - 非常不推荐,与MVVM极其相反。

答案 1 :(得分:0)

好答案。我的实现(在代码中生成Buttons数组,然后想要其索引数组):

            Button[,] Buttons = new Button[8, endTimePlus1 - startTime];

        var buttons = controlGrid.Children.Cast<Button>();
        for (int i = 0; i < 8; i++)
        {
            for (int j = 0; j < endTimePlus1 - startTime; j++)
            {
                Buttons[i,j] =  buttons.Where(x => Grid.GetRow(x) == j && Grid.GetColumn(x) == i).FirstOrDefault();
            }
        }