我有一个有 5 列和 10 行的网格,在每列中,单击任意数字时的值应该是 0-9,我必须获得单击单元格的值。建造这个的最好方法是什么?
user1021167
问问题
189 次
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 回答