我正在尝试在网格中以编程方式添加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>
但是当我在模拟器中运行时,我只看到1行,所有项目似乎彼此重叠。
我尝试在我的xaml文件中删除Grid.Row
,但我认为它没有任何区别。
更新:
感谢您的回答,我几乎可以使用它。现在我的问题是 为什么我需要添加一个新的RowDefintion()我添加一个新的子项(),我可以在没有RowDefinitions.Add(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);
}
答案 0 :(得分:0)
需要RowDefinition,因为这是Grid控件处理其子项的方式。如果网格内的两个控件位于同一行和列中,则它们将根据它们添加到网格的顺序在彼此之上绘制。 Grid控件不遵循它包含的控件的边界,它只关心每行和每列中的控件。但是WrapPanel不需要行和列。它会将它包含的控件定位在&#34;网格中,如#34;直到它根据Orientation属性的值达到自身的宽度或高度范围。