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