获取二维数组中单击的矩形

时间:2018-08-21 13:52:32

标签: c# wpf visual-studio uniformgrid

我有一个包含矩形的2D数组。它们存储在动态UniformGrid中。如何找出数组中的哪个矩形是MouseDown?

我尝试了这个,但是我不断得到[0,0]:

if (e.OriginalSource is Shape s)
        {
            cellRow = (int)s.GetValue(Grid.RowProperty);
            cellColumn = (int)s.GetValue(Grid.ColumnProperty);
            rectangle[cellRow,cellColumn].Fill = new SolidColorBrush(Colors.Black);
        }

这就是我生成矩形的方式:

rectangle = new Rectangle[rowcol, rowcol];
        for (int x = 0; x < rowcol; x++)
        {
            for (int y = 0; y < rowcol; y++)
            {
                rectangle[y, x] = new Rectangle { Stroke = Brushes.Black, StrokeThickness = 0.5, Fill = Brushes.White };
                GameUniformGrid.Children.Add(rectangle[y, x]);
            }
        }

xaml中的MouseDown事件: <UniformGrid x:Name="GameUniformGrid" HorizontalAlignment="Left" Height="272" VerticalAlignment="Top" Width="272" Grid.Row="0" Grid.Column="0" Rectangle.MouseDown="ToggleGrid"/>

1 个答案:

答案 0 :(得分:0)

我认为问题在于初始化矩形, 当您使用multidimentional array时,您会有一些行和列,而您正在做的是仅在行,列中都使用行。 如果rowcol = 0怎么办?由于这种情况,循环不会运行。

  

x

您应该

rectangle = new Rectangle[row, col];
    for (int x = 0; x < row; x++)
    {
        for (int y = 0; y < col; y++)
        {
            rectangle[y, x] = new Rectangle { Stroke = Brushes.Black, StrokeThickness = 0.5, Fill = Brushes.White };
            GameUniformGrid.Children.Add(rectangle[y, x]);
        }
    }

(例如)

  

其中row = 2,col = 2