在Xamarin.Forms中动态创建网格

dy1byipe  于 2022-12-07  发布在  其他
关注(0)|答案(2)|浏览(247)

我目前正在使用一个测试应用程序来列出产品等内容,但遇到了无法动态生成包含相应内容的网格的问题(目前仅限于标签)。我希望在调用主页时立即生成这些内容。
我已经浏览了各种教程和网站,但没有找到任何可以帮助我保存问题的东西。我尝试通过将其分配给按钮来启动创建网格的方法。我已经尝试将该方法分配给MainPage类的构造函数,但最终结果中仍然没有显示任何内容。

public void CreateDummyGrids()
    {
        Grid gOut = new Grid();

        gOut.RowDefinitions.Add(new RowDefinition());
        gOut.RowDefinitions.Add(new RowDefinition());
        gOut.RowDefinitions.Add(new RowDefinition());
        gOut.ColumnDefinitions.Add(new ColumnDefinition());
        gOut.ColumnDefinitions.Add(new ColumnDefinition());

        for (int rowIndex = 0; rowIndex < 3; rowIndex++)
        {
            for (int columnIndex = 0; columnIndex < 2; columnIndex++)
            {

                var label = new Label
                {
                   Text  ="Hello",
                    VerticalOptions = LayoutOptions.Center,
                    HorizontalOptions = LayoutOptions.Center
                };
                gOut.Children.Add(label, columnIndex, rowIndex);
            }
        }
    }
disho6za

disho6za1#

Grid gOutCreateDummyGrids方法的一个局部变量,不会传递到任何地方,所以在方法之后,它会被销毁。
您需要在XAML中有某种类型的元素来添加网格(或者只是将网格放在那里,然后直接向其中添加子元素)。
因此,在您希望网格出现的位置添加以下内容:
<Grid x:Name="productGrid" />
CreateDummyGrids更改为:

public void CreateDummyGrids()
    {
        productGrid.RowDefinitions.Add(new RowDefinition());
        productGrid.RowDefinitions.Add(new RowDefinition());
        productGrid.RowDefinitions.Add(new RowDefinition());
        productGrid.ColumnDefinitions.Add(new ColumnDefinition());
        productGrid.ColumnDefinitions.Add(new ColumnDefinition());

        for (int rowIndex = 0; rowIndex < 3; rowIndex++)
        {
            for (int columnIndex = 0; columnIndex < 2; columnIndex++)
            {

                var label = new Label
                {
                   Text  ="Hello",
                    VerticalOptions = LayoutOptions.Center,
                    HorizontalOptions = LayoutOptions.Center
                };
                productGrid.Children.Add(label, columnIndex, rowIndex);
            }
        }
    }

现在请记住,每次调用此方法时,都会添加新的ColumnDefinitions、RowDefinitions和Labels,因此,如果希望继续添加内容,则必须稍微更改设置。

b09cbbtk

b09cbbtk2#

Grid dynamicGrid = new Grid { Padding= new Thickness(5,5)};

        dynamicGrid.RowDefinitions.Add(new RowDefinition()); 
        dynamicGrid.ColumnDefinitions.Add(new ColumnDefinition());
        dynamicGrid.ColumnDefinitions.Add(new ColumnDefinition());

        var label = new Label();
        var entry= new Entry();
        dynamicGrid.Children.Add(label, 0, 0);
        dynamicGrid.Children.Add(entry, 1, 0);

相关问题