我有一个包含5个cols和10个行的网格,每个列中的值应该是0-9,点击我拥有的任意数字 获取单击的单元格的值。建立这个的最佳方法是什么?
答案 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);
}
}