如何将TextBox动态添加到网格中

本文关键字:网格 添加 动态 TextBox | 更新日期: 2023-09-27 18:25:20

我正在尝试以编程方式将TextBox添加到我的网格中。

这是我的代码:

private async void NavigationHelper_LoadState(object sender, LoadStateEventArgs e)
        {
            var input= await OneListDataSource.GetItemAsync((string)e.NavigationParameter);
 foreach (string item in input.getItems()) {
            TextBox textBox = new TextBox();
                textBox.Text = item;
                grid.RowDefinitions.Add(new RowDefinition());
                grid.Children.Add(textBox);
            }
}

在我的xaml:

<Grid Grid.Row="1" x:Name="ContentRoot" Margin="19,9.5,19,0">
        </Grid>

但当我在模拟器中运行它时,我只看到一行,所有的项目似乎都重叠在一起。我尝试删除xaml文件中的Grid.Row,但我认为它没有任何区别。

更新:

谢谢你的回答,我差点把它发挥作用了。现在我的问题是为什么我需要添加一个新的RowDefinition()我添加了一个新子项(),我可以在没有RowDefinitions的情况下完成吗?为每一行添加(new RowDefinition)?

foreach (string item in input.getItems()) {
            TextBox textBox = new TextBox();
                textBox.Text = item;
                grid.RowDefinitions.Add(new RowDefinition());  // why I need to do this everytime I add a new TextBox?
                Grid.SetRow(textBox, i++);
                Grid.SetColumn(textBox, 0);
                grid.Children.Add(textBox);
            }

如何将TextBox动态添加到网格中

需要一个RowDefinition,因为这就是Grid控件处理其Children的方式。如果网格内的两个控件位于同一行和同一列,则它们将根据添加到网格的顺序在彼此之上绘制。Grid控件不尊重其包含的控件的边界,它只关心每行和每列中的控件。但是,WrapPanel不需要行和列。它将以"类似网格"的方式定位它包含的控件,直到它达到基于Orientation属性值的宽度或高度边界。