我有一个网格,其中项目放在行和列中,但这不是我们必须关心的,因为每个元素绑定X
和Y
属性所以我们只需匹配元素在List
中使用右坐标。
当用户单击网格中的单元格时,形成teo对角线并穿过所选单元格的所有其他单元格必须更改其颜色。
实际上我设法编写了一些仅突出显示第一个对角线的代码,但没有反向突出显示第一个对角线。 (10x10平方格)
var t = // selected cell that contains X,Y coordinates
var newX = (t.Y > t.X) ? 0 : t.X - t.Y;
var newY = (t.Y > t.X) ? t.Y - t.X : 0;
var maxOffset = ((newX > newY) ? newX : newY);
for (int b = 0; b + maxOffset < GRID_SIZE; b++)
{
// this is selected cell, just skip it
if ((newX + b) == t.X && (newY + b) == t.Y) continue;
// select the cell to highlight
var projection = this.items.Where((i) => (i.X == (newX + b) && i.Y == (newY + b))).First();
}
但我被困在这里。
我想突出显示从所选单元格传递的反向对角线,并可能使用相同的变量和循环。
答案 0 :(得分:1)
如果您的单元格存储在一个数组中,循环将是一个很好的方法 - 但由于您已经拥有包含每个单元格的X和Y坐标的对象,您可以这样做:
var t = // selected cell that contains X,Y coordinates
var diagonals = cells.Where(n => Math.Abs(t.X - n.X) == Math.Abs(t.Y - n.Y));
这将查找与所选单元格的X距离等于距该单元格的Y距离的每个单元格。