代码之家  ›  专栏  ›  技术社区  ›  Dan-Levi Tømta

c#脚本中以网格类型外观加载图像的逻辑问题

  •  1
  • Dan-Levi Tømta  · 技术社区  · 11 年前

    我有一个未知数量的图像,我用代码添加到了一个Grid控件中,当图像以错误的顺序插入时,我有点迷失在逻辑中。看一看(由于测试,模量如下):

        grid.Height = this.Height;
        grid.Width = this.Width;
        grid.ShowGridLines = true;
        for (int i = 0; i < 50; i++)
        {
            RowDefinition rowDef = new RowDefinition();
            rowDef.Height = new GridLength(50);
            grid.RowDefinitions.Add(rowDef);
            ColumnDefinition colDef = new ColumnDefinition();
            colDef.Width = new GridLength(50);
            grid.ColumnDefinitions.Add(colDef);
        }
        int x = 1;
        int y = 1;
        for (int i = 0; i < 50; i++)
        {
            y++;
            if (i % 10 == 0)
            {
                x++;
                y = 1;
            }
            Image img = new Image() { Source = new BitmapImage(new Uri("Images/positive.png",UriKind.Relative)), Width = 50, Height = 50, Margin = new Thickness(2,2,2,2) };
            grid.Children.Add(img);
            Grid.SetRow(img, x);
            Grid.SetColumn(img, y);
        }
    

    结果: Grid of images not starting in the first row at the first coloumn

    正如你所看到的,这些图像按照模数所说的每10个图像开始一行,但它们不会从第一列的第一行开始。

    我想实现的是: Image of a gallery in a grid view manner

    我做错了什么?谢谢

    2 回复  |  直到 11 年前
        1
  •  1
  •   soumya sambit Kunda    11 年前

    按以下方式设置初始值可以解决问题。

    int x = -1;
    int y = -1;
    

    如果你想试试

    if (i % 10 == 0)
            {
                x++;
                y = 0;
            }
    
        2
  •  1
  •   Tom Studee    11 年前

    在循环的第一次迭代中,i为0。

    (0 % 10 == 0) // true
    

    所以x立即增加1。

    在开始时设置断点 for 循环并跟随执行。在这种情况下,你会立即看到它。