如何构建一个包含5列和10行的网格

时间:2012-09-14 16:17:46

标签: wpf xaml

我有一个包含5个cols和10个行的网格,每个列中的值应该是0-9,点击我拥有的任意数字 获取单击的单元格的值。建立这个的最佳方法是什么?

enter image description here

1 个答案:

答案 0 :(得分:1)

有很多方法可以做到这一点,如果不了解更多关于要求的信息,很难说哪一个最好。

一种方法是将鼠标单击侦听器附加到网格,并在处理程序中计算单击了哪个单元格。

Grid grid = e.Source as Grid;
Point clickedPoint = e.GetPosition(Grid.RowProperty);
int rowClicked = (int)Math.Floor(clickedPoint.Y / grid.RowDefinitions.Count);

这对性能有好处,因为只有一个事件监听器 - 但是你必须确保放在网格顶部的任何元素允许点击事件冒泡(也就是说,如果它们实现了一个点击监听器,他们应该使用e.Handled = false)。


另一种方法是,如果在Grid单元格中有UI元素,则可以将单击侦听器附加到Grid中的每个元素,并使用clickedElement.GetValue(Grid.RowProperty)来获取行号。


编辑您可以使用代码隐藏创建一个简单的5x10网格,如下所示:

        const int columns=5, rows=10;
        for (int i = 0; i < columns; i++)
        {
            grid.ColumnDefinitions.Add(new ColumnDefinition());
            for (int j = 0; j < rows; j++)
            {
                if (i==0) grid.RowDefinitions.Add(new RowDefinition());
                var content = new TextBlock() { Text = j.ToString() };
                Grid.SetColumn(content, i);
                Grid.SetRow(content, j);
                grid.Children.Add(content);
            }
        }