2017-03-23 76 views
0

所以我已经生成像这样的矩形阵列:更改矩形属性在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); 
      } 
     } 

它们填充画布称为“front_canvas”上:

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

我想要在MouseLeftButtonDown上改变矩形的属性。例如,我想将填充属性更改为绿色。正如上面我的代码提示,我想我或许能够实现这一目标的东西,如:

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

    } 

理想我想避免使用XAML并希望任何指导社区可以提供。

回答

0

你可以试试这个

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

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

+0

好的,谢谢。您的解决方案适用于:'Rectangle rect =(Rectangle)sender;' – newsharp