1

我有一个有 5 列和 10 行的网格,在每列中,单击任意数字时的值应该是 0-9,我必须获得单击单元格的值。建造这个的最好方法是什么?

在此处输入图像描述

4

1 回答 1

1

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

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

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

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


另一种方法是,如果网格单元格中有 UI 元素,则将单击侦听器附加到网格中的每个元素,并用于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);
            }
        }
于 2012-09-14T16:36:05.380 回答