在C#/ WPF中更改鼠标事件的矩形属性

时间:2017-03-23 02:45:29

标签: c# wpf

所以我有一个像这样生成的矩形数组:

        int nRec = 3;
        double sizeRec = 30.0;
        Rectangle[,] recArray = new Rectangle[nRec, nRec];

        for (int i = 0; i < nRec; i++)
        {
            for (int j = 0; j < nRec; j++)
            {
                recArray[i, j] = new Rectangle()
                {
                    Width = sizeRec,
                    Height = sizeRec,
                    Fill = Brushes.Red,
                    Stroke = Brushes.DarkRed,
                    StrokeThickness = 1,
                };
                // Add to a canvas for example
                recArray[i, j].MouseLeftButtonDown += (sender2, e2) => ClickEvent(sender2, e2, i, j);
                front_canvas.Children.Add(recArray[i, j]);
                Canvas.SetTop(recArray[i, j], sizeRec + sizeRec * i);
                Canvas.SetLeft(recArray[i, j], sizeRec + sizeRec * j);
            }
        }

它们填充在名为&#34; front_canvas&#34;:

的画布上
        <Canvas HorizontalAlignment="Left" Height="305" Margin="0,0,-0.333,-13" VerticalAlignment="Top" Width="509" Name="front_canvas"/>

我希望在MouseLeftButtonDown上更改矩形的属性。例如,我想将Fill属性更改为绿色。正如我上面的代码所示,我认为我可以通过以下方式实现这一目标:

    private void ClickEvent(object sender, EventArgs e, int i, int j)
    {
        //Code to change Change rectangle properties:

    }

理想情况下,我希望避免使用XAML,并感谢社区提供的任何指导。

1 个答案:

答案 0 :(得分:0)

你可以试试这个

   private void ClickEvent(object sender, EventArgs e)
   {
       Rect rect = (Rectangle)sender;
       rect.Fill = Brushes.Green;
   }

PS:避免在循环中捕获局部变量。将捕获变量本身而不是值。