在WPF中创建10×10矩阵的问题

时间:2011-03-04 13:33:25

标签: wpf

您好我正在尝试使用以下代码

在WPF中创建10 x 10矩阵
private void MainGrid_Loaded(object sender, RoutedEventArgs e)
        {
            MainGrid.RowDefinitions.Add(new RowDefinition());
            MainGrid.ColumnDefinitions.Add(new ColumnDefinition());

            //Create rectangle
            Rectangle rect = new Rectangle();
            rect.Width = 10;
            rect.Height = 10;

            for (int i = 0; i < 10; i++) // for rows
            {
                for (int j = 0; j < 10; j++) //for columns
                {                    
                    if (i % 2 == 0 || j % 2 == 0)
                    {
                        rect.Stroke = Brushes.Green;
                        rect.Fill = new SolidColorBrush(System.Windows.Media.Color.FromArgb(255,255,0,0));
                    }
                    else
                    {
                        rect.Stroke = Brushes.DarkOrchid;
                        rect.Fill = new SolidColorBrush(System.Windows.Media.Color.FromArgb(200, 204, 10, 20));
                    }
                    Grid.SetColumn(rect, j);                    
                }
                Grid.SetRow(rect, i);
            }
            MainGrid.Children.Add(rect); 
        }

xaml定义为

<Window x:Class="WpfApplication1.Window1"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Window1" Height="300" Width="300">
    <Grid x:Name="MainGrid" Loaded="MainGrid_Loaded">

    </Grid>
</Window>

但它只显示了一个矩形。

我做错了什么..请帮忙

由于

3 个答案:

答案 0 :(得分:1)

您需要在循环中创建新的矩形,而不仅仅是一次。

private void MainGrid_Loaded(object sender, RoutedEventArgs e)
{   
    //Add rows and columns.
    for (int i = 0; i < 10; i++)
    {
        //Add row.
        MainGrid.RowDefinitions.Add(new RowDefinition());
        //Add column.
        MainGrid.ColumnDefinitions.Add(new ColumnDefinition());
    } 

    for (int i = 0; i < 10; i++) // for rows
    {
        for (int j = 0; j < 10; j++) //for columns
        { 
             //Create rectangle
             Rectangle rect = new Rectangle();
             rect.Width = 10;
             rect.Height = 10;   

             if (i % 2 == 0 || j % 2 == 0)
             {
                  rect.Stroke = Brushes.Green;
                  rect.Fill = new SolidColorBrush(System.Windows.Media.Color.FromArgb(255,255,0,0));
             }
             else
             {
                  rect.Stroke = Brushes.DarkOrchid;
                  rect.Fill = new SolidColorBrush(System.Windows.Media.Color.FromArgb(200, 204, 10, 20));
             }
             Grid.SetRow(rect, i);
             Grid.SetColumn(rect, j); 
             MainGrid.Children.Add(rect);                   
        }
    }
}

答案 1 :(得分:0)

您的Grid只有1行1列。您必须在Grid中定义10行和10列。

此外,您只有一个Rectangle,您可以将颜色更改为100次。您必须将new Rectangle()SetRowSetColumnAdd 置于内部循环中才能实现此目的。

答案 2 :(得分:0)

请注意,在这些情况下,当您在网格中需要相同大小的单元格时,方式更容易使用UniformGrid而不是Grid。 它的性能也更好。